分享 数组的元素批量初始化要注意的地方

chen7897499 · 2016年02月23日 · 最后由 qinfanpeng 回复于 2016年02月23日 · 2026 次阅读

像这样生成一个数组的话

ary = Array.new(3, "foo")
p ary                 #=> ["foo", "foo", "foo"]
ary[0].capitalize!
p ary                 #=> ["Foo", "Foo", "Foo"] (数组里面每个元素都是相同的对象)

ruby-doc 里面说这种方式的初始化方式只推荐生成不变的对象,比如 symbol, 数字,还有 true 和 false

但是换种语法来生成数组的话

ary = Array.new(3){ "foo" }
p ary                  #=> ["foo", "foo", "foo"]
ary[0].capitalize!
p ary                  #=> ["Foo", "foo", "foo"]  (每个元素都是不同的对象)
需要 登录 后方可回复, 如果你还没有账号请 注册新账号