[code="ruby"]
cvs = ["a",""]; #第一种空格
cvs << Array.new(3, "") # 第二种空格
cvs.flatten!()
puts cvs.inspect
cvs.collect! do |item|
item.insert(0,"\"")<<"\"";
end
puts cvs.inspect
[/code]
结果最后三个都是: """"""
第一种空格和第二种空格有什么区别?
问题出在Array.new(3,"")上。
对这种方式创建的Array,每个元素指向的实际上都是同一个对象。
在你的collect!处理中,当处理到这三个元素时,每次都在同一个对象前后增加"号,所以最终变成了三对"号。
楼上说的没错,Array.new(3,"")确实是每个元素都是同一个对象。
[code="java"]
Array.new(3,"")
=> ["", "", ""]
a=Array.new(3,"")
=> ["", "", ""]
a.map{|item| item.object_id}
=> [39405660, 39405660, 39405660]
[/code]
而像collect!这样以!结尾的方法具有破坏性,会改变对象,所以才。。