L'attacco dei cloni (1)
Gli oggetti R6 usano lo stesso comportamento di copia per riferimento degli ambienti. Cioè, se copi un oggetto R6 usando l'assegnazione <-, allora le modifiche in un oggetto si rifletteranno anche nelle copie.
a_reference_copy <- an_r6_object
Gli oggetti R6 hanno un metodo clone() generato automaticamente, usato per creare una copia per valore, in modo che le modifiche a una copia non influenzino le altre.
a_value <- an_r6_object$clone()
Questo esercizio fa parte del corso
Programmazione orientata agli oggetti con S3 e R6 in R
Istruzioni dell'esercizio
Nel tuo workspace è stata predefinita una fabbrica di forni a microonde come microwave_oven_factory.
- Crea un oggetto
MicrowaveOvene assegnalo aa_microwave_oven. - Copia il microonde in una variabile chiamata
assigned_microwave_ovenusando l'assegnazione<-. - Copia il microonde in una variabile chiamata
cloned_microwave_ovenusando il metodoclone()dia_microwave_oven. - Modifica il campo
power_level_wattsdia_microwave_ovena400. - Verifica che i campi
power_level_wattsdia_microwave_oveneassigned_microwave_ovensianoidentical()(docs). - Verifica che i campi
power_level_wattsdia_microwave_ovenecloned_microwave_ovennon sianoidentical()(docs).
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# Create a microwave oven
a_microwave_oven <- microwave_oven_factory$new()
# Copy a_microwave_oven using <-
assigned_microwave_oven <- ___
# Copy a_microwave_oven using clone()
cloned_microwave_oven <- ___$___()
# Change a_microwave_oven's power level
___ <- ___
# Check a_microwave_oven & assigned_microwave_oven same
identical(___, ___)
# Check a_microwave_oven & cloned_microwave_oven different
identical(___, ___)