Ruby 数组文字与新的、不同的行为?

Ruby 数组文字与新的、不同的行为?,ruby,arrays,immutability,Ruby,Arrays,Immutability,我不明白为什么这两个数组(见下文)表现不同 dotnew = Array.new(5, []) literal = [[], [], [], [], []] dotnew[0] << 1 dotnew # => [[1], [1], [1], [1], [1]] literal[0] << 1 literal # => [[1], [], [], [], []] dotnew=Array.new(5,[] 文字=[]、[]、[]、[]、[]、[] dot

我不明白为什么这两个数组(见下文)表现不同

dotnew = Array.new(5, [])
literal = [[], [], [], [], []]

dotnew[0] << 1
dotnew # => [[1], [1], [1], [1], [1]]

literal[0] << 1
literal # => [[1], [], [], [], []]
dotnew=Array.new(5,[]
文字=[]、[]、[]、[]、[]、[]
dotnew[0][[1]、[1]、[1]、[1]、[1]]
文字[0][[1],[],[],[],[],[],[]

因为在
dotnew
中只有一个数组和对它的5个引用。当您通过其中一个引用更改数组时,其他人也会看到它

从:

在第一种形式中,如果未发送任何参数,则新数组将为空。发送大小和可选obj时,将使用obj的大小副本创建一个数组。请注意,所有元素都将引用同一对象obj

在文本情况下,有5个不同的数组(每个数组有一个引用)

也许,您想这样做:

dotnew = Array.new(5) { [] }
dotnew[0] << 1
dotnew # => [[1], [], [], [], []]
dotnew=Array.new(5){[]}
dotnew[0][[1],[],[],[],[],[],[]]

因为在
dotnew
中只有一个数组和对它的5个引用。当您通过其中一个引用更改数组时,其他人也会看到它

从:

在第一种形式中,如果未发送任何参数,则新数组将为空。发送大小和可选obj时,将使用obj的大小副本创建一个数组。请注意,所有元素都将引用同一对象obj

在文本情况下,有5个不同的数组(每个数组有一个引用)

也许,您想这样做:

dotnew = Array.new(5) { [] }
dotnew[0] << 1
dotnew # => [[1], [], [], [], []]
dotnew=Array.new(5){[]}
dotnew[0][[1],[],[],[],[],[],[]]

谢谢,现在一切都有意义了。谢谢,现在一切都有意义了。