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

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

Các đối tượng R6 sử dụng hành vi sao chép theo tham chiếu giống như environment. Tức là, nếu bạn sao chép một đối tượng R6 bằng phép gán <-, thì thay đổi ở một đối tượng sẽ phản ánh ở các bản sao.

a_reference_copy <- an_r6_object

Đối tượng R6 có sẵn phương thức clone() được tạo tự động để tạo bản sao theo giá trị, nhờ đó thay đổi ở một bản sao sẽ không ảnh hưởng đến các bản còn lại.

a_value <- an_r6_object$clone()

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 nhà máy sản xuất lò vi sóng đã được định nghĩa sẵn trong workspace của bạn là microwave_oven_factory.

  • Tạo một đối tượng MicrowaveOven và gán vào a_microwave_oven.
  • Sao chép lò vi sóng vào biến assigned_microwave_oven bằng phép gán <-.
  • Sao chép lò vi sóng vào biến cloned_microwave_oven bằng phương thức clone() của a_microwave_oven.
  • Thay đổi trường power_level_watts của a_microwave_oven thành 400.
  • Xác minh rằng các trường power_level_watts của a_microwave_ovenassigned_microwave_ovenidentical() (docs).
  • Xác minh rằng các trường power_level_watts của a_microwave_ovencloned_microwave_oven không identical() (docs).

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()

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