Tôi có một struct trong mã Ruby của tôi trông hơi như thế nàyTại sao String :: sub!() Thay đổi bản gốc của một đối tượng nhân bản trong Ruby?
Parameter = Struct.new(:name, :id, :default_value, :minimum, :maximum)
sau, tôi tạo ra một thể hiện của struct này sử dụng
freq = Parameter.new('frequency', 15, 1000.0, 20.0, 20000.0)
Tại một số điểm, tôi cần một bản sao chính xác của việc này struct, vì vậy tôi gọi
newFreq = freq.clone
Sau đó, tôi thay đổi newFreq
's tên
newFreq.name.sub!('f', 'newF')
Điều gì, kỳ diệu, thay đổi freq.name
, quá!
Bài tập đơn giản như newFreq.name = 'newFrequency'
không thay đổi freq
.
Đây có phải là cách này được cho là hoạt động không?
Chỉnh sửa: Bạn nên sử dụng lớp học thay vì cấu trúc và quá tải clone
để tạo bản sao sâu?