Inizia subitoInizia gratis

L'attacco dei cloni (2)

Se un oggetto R6 contiene un altro oggetto R6 in uno o più dei suoi campi, allora per impostazione predefinita clone() copierà i campi R6 per riferimento. Per copiare tali campi R6 per valore, il metodo clone() deve essere chiamato con l'argomento deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Questo esercizio fa parte del corso

Programmazione orientata agli oggetti con S3 e R6 in R

Visualizza corso

Istruzioni dell'esercizio

Nel tuo workspace è stata predefinita una classe R6 PowerPlug per descrivere la spina di alimentazione del microonde. La classe MicrowaveOven è stata aggiornata per includere un oggetto PowerPlug.

  • Crea un oggetto MicrowaveOven e assegnalo a a_microwave_oven.
  • Copia il microonde in una variabile chiamata cloned_microwave_oven usando il metodo clone() senza argomenti.
  • Copia il microonde in una variabile chiamata deep_cloned_microwave_oven usando il metodo clone() passando deep = TRUE.
  • Cambia il campo type del campo power_plug di a_microwave_oven in "British".
  • Verifica che i campi power_plug$type di a_microwave_oven e cloned_microwave_oven siano identici.
  • Verifica che i campi power_plug$type di a_microwave_oven e deep_cloned_microwave_oven siano diversi.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

# Create a microwave oven
a_microwave_oven <- microwave_oven_factory$new()

# Look at its power plug
a_microwave_oven$power_plug

# Copy a_microwave_oven using clone(), no args
cloned_microwave_oven <- ___
  
# Copy a_microwave_oven using clone(), deep = TRUE
deep_cloned_microwave_oven <- ___
  
# Change a_microwave_oven's power plug type  
___$___ <- ___
  
# Check a_microwave_oven & cloned_microwave_oven same 
identical(___, ___)

# Check a_microwave_oven & deep_cloned_microwave_oven different 
identical(___, ___)  
Modifica ed esegui il codice