Bắt đầu ngayBắt đầu miễn phí

Cuộc tấn công của các bản sao (2)

Nếu một đối tượng R6 chứa một (hoặc nhiều) đối tượng R6 khác trong các trường của nó, thì mặc định clone() sẽ sao chép các trường R6 theo tham chiếu. Để sao chép các trường R6 đó theo giá trị, cần gọi phương thức clone() với đối số deep = TRUE.

a_deep_copy <- an_r6_object$clone(deep = TRUE)

Bài tập này là một phần của khóa học

Lập trình hướng đối tượng với S3 và R6 trong R

Xem khóa học

Hướng dẫn bài tập

Một lớp R6 PowerPlug mô tả phích cắm điện của lò vi sóng đã được định nghĩa sẵn trong không gian làm việc của bạn. Lớp MicrowaveOven đã được cập nhật để bao gồm một đối tượng PowerPlug.

  • Tạo một đối tượng MicrowaveOven và gán cho a_microwave_oven.
  • Sao chép lò vi sóng vào biến cloned_microwave_oven bằng phương thức clone() mà không truyền đối số.
  • Sao chép lò vi sóng vào biến deep_cloned_microwave_oven bằng phương thức clone() với đối số deep = TRUE.
  • Đổi trường type của trường power_plug trong a_microwave_oven thành "British".
  • Kiểm tra rằng các trường power_plug$type của a_microwave_ovencloned_microwave_oven là giống hệt nhau.
  • Kiểm tra rằng các trường power_plug$type của a_microwave_ovendeep_cloned_microwave_oven là khác nhau.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# 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(___, ___)  
Chỉnh sửa và Chạy Mã