Inizia subitoInizia gratis

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

Visualizza corso

Istruzioni dell'esercizio

Nel tuo workspace è stata predefinita una fabbrica di forni a microonde come microwave_oven_factory.

  • Crea un oggetto MicrowaveOven e assegnalo a a_microwave_oven.
  • Copia il microonde in una variabile chiamata assigned_microwave_oven usando l'assegnazione <-.
  • Copia il microonde in una variabile chiamata cloned_microwave_oven usando il metodo clone() di a_microwave_oven.
  • Modifica il campo power_level_watts di a_microwave_oven a 400.
  • Verifica che i campi power_level_watts di a_microwave_oven e assigned_microwave_oven siano identical() (docs).
  • Verifica che i campi power_level_watts di a_microwave_oven e cloned_microwave_oven non siano identical() (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(___, ___)  
Modifica ed esegui il codice