Kloningarnas attack (1)
R6-objekt använder samma kopiering via referens som miljöer. Det innebär att om du kopierar ett R6-objekt med <--tilldelning, kommer ändringar i ett objekt även att återspeglas i kopiorna.
a_reference_copy <- an_r6_object
R6-objekt har en automatiskt genererad clone()-metod som används för att skapa en kopia via värde, så att ändringar i en kopia inte påverkar de övriga.
a_value <- an_r6_object$clone()
Den här övningen är en del av kursen
Objektorienterad programmering med S3 och R6 i R
Övningsinstruktioner
En mikrovågsugnsfabrik har fördefifierats i din arbetsyta som microwave_oven_factory.
- Skapa ett
MicrowaveOven-objekt och tilldela det tilla_microwave_oven. - Kopiera mikrovågsugnen till en variabel med namnet
assigned_microwave_ovenmed<--tilldelning. - Kopiera mikrovågsugnen till en variabel med namnet
cloned_microwave_ovenmed hjälp avclone()-metoden påa_microwave_oven. - Ändra fältet
power_level_wattsia_microwave_oventill400. - Kontrollera att fälten
power_level_wattsia_microwave_ovenochassigned_microwave_ovenäridentical()(docs). - Kontrollera att fälten
power_level_wattsia_microwave_ovenochcloned_microwave_oveninte äridentical()(docs).
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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(___, ___)