我想在某一個數組中插入元素,代碼如下:
foo = Array.new(10,[])
foo[0] << 1
puts foo.to_s
輸出的結果是
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
這是為什麼啊?
如果是哈希的話
bar = Hash.new([])
bar[0] << 1
puts bar.to_s
puts bar[1].to_s
輸出的結果是
{}
[1]
更加摸不著頭腦了……求指教……
這個方法所建立的10個空數組是同一個Object
如果想要建立不同Object的話,請使用以下方法。
參考: http://ruby-doc.org/core-2.0.0/Array.html#label-Creating+Arrays
補樓上, 所有object_id是一樣的
]foo.map(&:object_id)
=> [9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 929880, 929880, 9929880, 9929880]
我通常都是用map.
(1..10).map {[]}
不過我還是疑問,為什麼還是同一個 Array 呢?