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
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
MicrowaveOvendan simpan kea_microwave_oven. - Salin microwave ke variabel bernama
cloned_microwave_ovenmenggunakan metodeclone()tanpa argumen. - Salin microwave ke variabel bernama
deep_cloned_microwave_ovenmenggunakan metodeclone()dengan argumendeep = TRUE. - Ubah field
typedari fieldpower_plugmilika_microwave_ovenmenjadi"British". - Verifikasi bahwa field
power_plug$typepadaa_microwave_ovendancloned_microwave_ovenidentik. - Verifikasi bahwa field
power_plug$typepadaa_microwave_ovendandeep_cloned_microwave_ovenberbeda.
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(___, ___)