Klonların Saldırısı (1)
R6 nesneleri, ortamlar (environments) gibi başvuruya göre kopyalama davranışı kullanır. Yani bir R6 nesnesini <- atamasıyla kopyalarsan, bir nesnedeki değişiklikler kopyalarda da yansır.
a_reference_copy <- an_r6_object
R6 nesnelerinde, değerine göre kopya oluşturmak için otomatik olarak üretilen bir clone() metodu vardır; böylece bir kopyadaki değişiklikler diğerlerini etkilemez.
a_value <- an_r6_object$clone()
Bu egzersiz, kursun bir parçasıdır
R'de S3 ve R6 ile Nesne Yönelimli Programlama
Egzersiz talimatları
Çalışma alanında microwave_oven_factory olarak bir mikrodalga fırın fabrikası önceden tanımlandı.
- Bir
MicrowaveOvennesnesi oluştur vea_microwave_ovendeğişkenine ata. - Mikrodalgayı
<-atamasıylaassigned_microwave_ovenadlı değişkene kopyala. - Mikrodalgayı
a_microwave_oven'ınclone()metodunu kullanarakcloned_microwave_ovenadlı değişkene kopyala. a_microwave_oven'ınpower_level_wattsalanını400olarak değiştir.a_microwave_ovenileassigned_microwave_oven'ınpower_level_wattsalanlarınınidentical()olduğunu doğrula (docs).a_microwave_ovenilecloned_microwave_oven'ınpower_level_wattsalanlarınınidentical()OLMADIĞINI doğrula (docs).
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
# 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(___, ___)