Ruby (solved) 这是怎么了?

Unknow user · September 01, 2012 · Last by funfriend replied at September 01, 2012 · 2116 hits
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

Unknow user #2 September 01, 2012

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))
Unknow user #4 September 01, 2012

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

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

Unknow user #6 September 01, 2012

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

You need to Sign in before reply, if you don't have an account, please Sign up first.