MulaiMulai sekarang secara gratis

Serangan Para Klon (2)

Jika sebuah objek R6 memiliki objek R6 lain pada satu atau lebih field-nya, maka secara default clone() akan menyalin field R6 tersebut berdasarkan referensi. Untuk menyalin field R6 tersebut berdasarkan nilai, metode clone() harus dipanggil dengan argumen deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Latihan ini adalah bagian dari kursus

Pemrograman Berorientasi Objek dengan S3 dan R6 di R

Lihat Kursus

Petunjuk latihan

Kelas R6 PowerPlug untuk menggambarkan colokan listrik pada microwave sudah didefinisikan di workspace Anda. Kelas MicrowaveOven telah diperbarui untuk menyertakan sebuah objek PowerPlug.

  • Buat objek MicrowaveOven dan simpan ke a_microwave_oven.
  • Salin microwave ke variabel bernama cloned_microwave_oven menggunakan metode clone() tanpa argumen.
  • Salin microwave ke variabel bernama deep_cloned_microwave_oven menggunakan metode clone() dengan argumen deep = TRUE.
  • Ubah field type dari field power_plug milik a_microwave_oven menjadi "British".
  • Verifikasi bahwa field power_plug$type pada a_microwave_oven dan cloned_microwave_oven identik.
  • Verifikasi bahwa field power_plug$type pada a_microwave_oven dan deep_cloned_microwave_oven berbeda.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

# 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(___, ___)  
Edit dan Jalankan Kode