Ruby 为什么数组连接会导致(无限?)嵌套数组?

Ruby 为什么数组连接会导致(无限?)嵌套数组?,ruby,arrays,concatenation,Ruby,Arrays,Concatenation,如果在IRB控制台中运行以下代码: arr = [[], 1] arr[0]<<arr 然后: 等等 发生了什么事?实际创建的结构是什么?这种结构有多深?零是从哪里来的?看看里面是什么 arr[0] # => [[[...], 1]] arr[0]是一个只有一个元素的数组。因此[1]将从此数组中退出并返回nil arr[0][0] # => [[[...]], 1] arr[0][0]将进入顶部数组的唯一一个元素,该元素包含两个值,因此[1]将找到一个值 它之所以如

如果在IRB控制台中运行以下代码:

arr = [[], 1]
arr[0]<<arr
然后:

等等


发生了什么事?实际创建的结构是什么?这种结构有多深?零是从哪里来的?

看看里面是什么

arr[0]
# => [[[...], 1]]
arr[0]
是一个只有一个元素的数组。因此
[1]
将从此数组中退出并返回nil

arr[0][0]
# => [[[...]], 1]
arr[0][0]
将进入顶部数组的唯一一个元素,该元素包含两个值,因此
[1]
将找到一个值

它之所以如此,是因为您确实执行了
arr[0]
Array#size
也是必要的,以说明为什么有时您会将
nil
1
视为输出:

arr = [[], 1]
arr[0]<< arr
arr.size # => 2
arr # => [[[...]], 1]

arr[0] # => [[[...], 1]]
arr[0].size # => 1
arr[0][1] # => nil

arr[0][0] # => [[[...]], 1]
arr[0][0].size # => 2
arr[0][0][1] # => 1

arr[0][0][0] # => [[[...], 1]]
arr[0][0][0].size # => 1
arr[0][0][0][1] # => nil

arr[0][0][0][0] # => [[[...]], 1]
arr[0][0][0][0].size # => 2
arr[0][0][0][0][1] # => 1
arr=[],1]
arr[0]2
arr#=>1]
arr[0]#=>[[…],1]]
arr[0]。大小#=>1
arr[0][1]#=>nil
arr[0][0]#=>1]
arr[0][0]。大小#=>2
arr[0][0][1]#=>1
arr[0][0][0]#=>[[…],1]]
arr[0][0][0]。大小#=>1
arr[0][0][0][1]#=>nil
arr[0][0][0][0][1]
arr[0][0][0][0]。大小#=>2
arr[0][0][0][1]#=>1

右脑放屁。实际上写出来确实解释了零和尺寸。但是,为什么不简单地将arr设置为[[],1],1]。为什么它会复发,到底有多深?右脑放屁。实际上写出来确实解释了零和尺寸。但是,为什么不简单地将arr设置为[[],1],1]。为什么它会再次出现,又有多深?我真的很抱歉,我觉得我错过了一些真正基本的东西。然而,arr=[[],1]arr[0]@AbrahamP你的意思是你看不出修改上述注释之间的区别,中途不小心按了回车键,为垃圾邮件感到抱歉。是的,我确实理解@AbrahamP在使用
=
赋值时的区别,无论你使用的长度如何,它总是作为例外工作,我错了吗?arr[0]…[0][1]将始终返回1,无论发生什么情况。
arr[0][0]
# => [[[...]], 1]
arr = ["whatever", 1]
# => ["whatever", 1]
arr[0] = arr
# => [[...], 1]
arr[0][1]
# => 1
arr[0][0][1]
arr = ["whatever", 1]
# => ["whatever", 1]
arr.object_id
# => 69999412942060
arr[0] = arr
# => [[...], 1]
arr[0].object_id
# => 69999412942060
arr[0].object_id == arr.object_id
# => true
arr = ["whatever", 1]
arr_copy = Marshal.load(Marshal.dump(arr)) # copy the value,
                                           # delete the object reference dependence
arr[0] = arr_copy
puts arr.inspect
# [["whatever", 1], 1] # no infinit recurrence.
arr = [[], 1]
arr[0]<< arr
arr.size # => 2
arr # => [[[...]], 1]

arr[0] # => [[[...], 1]]
arr[0].size # => 1
arr[0][1] # => nil

arr[0][0] # => [[[...]], 1]
arr[0][0].size # => 2
arr[0][0][1] # => 1

arr[0][0][0] # => [[[...], 1]]
arr[0][0][0].size # => 1
arr[0][0][0][1] # => nil

arr[0][0][0][0] # => [[[...]], 1]
arr[0][0][0][0].size # => 2
arr[0][0][0][0][1] # => 1