BaşlayınÜcretsiz başlayın

Klonların Saldırısı (2)

Bir R6 nesnesi alanlarından birinde ya da birkaçında başka bir R6 nesnesi barındırıyorsa, varsayılan olarak clone() bu R6 alanlarını başvuru (reference) ile kopyalar. Bu R6 alanlarını değer (value) olarak kopyalamak için clone() metodunun deep = TRUE argümanıyla çağrılması gerekir.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Bu egzersiz, kursun bir parçasıdır

R'de S3 ve R6 ile Nesne Yönelimli Programlama

Kursa Göz Atın

Egzersiz talimatları

Mikrodalganın güç prizini tanımlayan PowerPlug adlı bir R6 sınıfı çalışma alanında önceden tanımlandı. MicrowaveOven sınıfı bir PowerPlug nesnesi içerecek şekilde güncellendi.

  • Bir MicrowaveOven nesnesi oluştur ve a_microwave_oven değişkenine ata.
  • Mikrodalgayı clone() metodunu argümansız kullanarak cloned_microwave_oven adlı değişkene kopyala.
  • Mikrodalgayı clone() metodunu deep = TRUE argümanıyla çağırarak deep_cloned_microwave_oven adlı değişkene kopyala.
  • a_microwave_oven nesnesinin power_plug alanının type alanını "British" olarak değiştir.
  • a_microwave_oven ve cloned_microwave_oven nesnelerinin power_plug$type alanlarının özdeş olduğunu doğrula.
  • a_microwave_oven ve deep_cloned_microwave_oven nesnelerinin power_plug$type alanlarının farklı olduğunu doğrula.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

# 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(___, ___)  
Kodu Düzenle ve Çalıştır