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
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
MicrowaveOvenvà gán vàoa_microwave_oven. - Sao chép lò vi sóng vào biến
assigned_microwave_ovenbằng phép gán<-. - Sao chép lò vi sóng vào biến
cloned_microwave_ovenbằng phương thứcclone()củaa_microwave_oven. - Thay đổi trường
power_level_wattscủaa_microwave_oventhành400. - Xác minh rằng các trường
power_level_wattscủaa_microwave_ovenvàassigned_microwave_ovenlàidentical()(docs). - Xác minh rằng các trường
power_level_wattscủaa_microwave_ovenvàcloned_microwave_ovenkhôngidentical()(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(___, ___)