Ruby (solved) 这是怎么了?

匿名 · 2012年09月01日 · 最后由 funfriend 回复于 2012年09月01日 · 2123 次阅读
1.9.3-p194 :001 > a = Array.new 4, Array.new(2)
 => [[nil, nil], [nil, nil], [nil, nil], [nil, nil]] 
1.9.3-p194 :002 > a[0]
 => [nil, nil] 
1.9.3-p194 :003 > a[0][0] = 1
 => 1 
1.9.3-p194 :004 > a
 => [[1, nil], [1, nil], [1, nil], [1, nil]] 

怎么我的 a 成这个样子?

应该是因为 a = Array.new 4, Array.new(2) 这样只是创建了 4个Array.new(2) 的拷贝吧 他们其实是相同的 改了一起其他的就都改了。。 http://www.ruby-doc.org/core-1.9.3/Array.html

匿名 #2 2012年09月01日

It is created with size copies of obj (that is, size references to the same obj).

你可以这样 a = Array.new(4){|index| Array.new(2) }

a = Array.new 4, Array.new(2) 
=> a = Array.new(4, Array.new(2))
匿名 #4 2012年09月01日

#1 楼 @Tony612 #2 楼 @yggg #3 楼 @hysios 豁然开朗,多谢几位!还是以前用的时候不够仔细。今天第一次发现。。

#4 楼 没事没事 其实我也是刚刚看到这个 然后去查了才知道。。

匿名 #6 2012年09月01日

#5 楼 @Tony612 原来如此,哥们 有心人儿

需要 登录 后方可回复, 如果你还没有账号请 注册新账号