Như đã đề cập trong this answer, Array.new(size, object)
tạo một mảng với các tham chiếu size
đến cùng một số object
.Trong Ruby, tại sao Array.new (kích thước, đối tượng) tạo một mảng bao gồm nhiều tham chiếu đến cùng một đối tượng?
hash = Hash.new
a = Array.new(2, hash)
a[0]['cat'] = 'feline'
a # => [{"cat"=>"feline"},{"cat"=>"feline"}]
a[1]['cat'] = 'Felix'
a # => [{"cat"=>"Felix"},{"cat"=>"Felix"}]
Tại sao của Ruby làm điều này, chứ không phải làm một dup
hoặc clone
của object
?
"Bởi vì đó là những gì tài liệu cho biết." - Tôi đã hy vọng để bật lý do tại sao ngăn xếp một chút xa hơn thế. –
Popping lý do ngăn xếp: bởi vì khi bạn vượt qua trong một đối tượng được sử dụng để điền trước mảng, mảng sẽ được điền trước với đối tượng đó. – yfeldblum
@Justice: Bạn có nghiêm túc hay mỉa mai với nhận xét đó không? –