Arrays 为什么Array.new(10){e|e=e&x2B;2}产生[024481041618]?

Arrays 为什么Array.new(10){e|e=e&x2B;2}产生[024481041618]?,arrays,ruby,Arrays,Ruby,我不理解以下示例中块产生的结果: 以下阵列初始化: my_arr = Array.new(10) { |e| e = e * 2 } 产生以下结果: [0 2 4 6 8 10 12 14 16 18] [2, 3, 4, 5, 6, 7, 8 , 9, 10, 11] 虽然我希望有一个:[0 0 0 0 0 0]。 在我看来,元素e没有初始化,所以它的值最多可以是零(尽管我希望是‘nil’),并且零乘以某个数字总是返回零。或者我希望它是一个几何级数,而不是算术级数。那为什么??? 所以我

我不理解以下示例中块产生的结果:

以下阵列初始化:

my_arr = Array.new(10) { |e| e = e * 2 }
产生以下结果:

[0 2 4 6 8 10 12 14 16 18]
[2, 3, 4, 5, 6, 7, 8 , 9, 10, 11]
虽然我希望有一个:
[0 0 0 0 0 0]
。 在我看来,元素e没有初始化,所以它的值最多可以是零(尽管我希望是‘nil’),并且零乘以某个数字总是返回零。或者我希望它是一个几何级数,而不是算术级数。那为什么??? 所以我一定错过了什么

以及以下代码:

my_arr = Array.new(10) { |e| e = e + 2 }
产生以下结果:

[0 2 4 6 8 10 12 14 16 18]
[2, 3, 4, 5, 6, 7, 8 , 9, 10, 11]
虽然我希望有一个:
[0244881014141618]
。 在我看来,元素e没有初始化,所以它的值最多可以是零(尽管我希望是“nil”)。所以它应该是2的算术级数,而不是1。为什么

我查了一下,找不到任何线索来理解这些如此不直观的结果

这个想法来自这里


我认为重点在于解释
e
应该代表什么值?

这可以写成:

Array.new(10) { |index| index * 2 } #=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
与您链接到的文档中的最终表单相匹配:

new(size){| index | block}

其中创建了给定大小(10)的数组。该数组中的每个元素都是通过将元素的索引传递给给定的块并存储返回值来创建的


在您的示例中,您分配给
e
的值在初始化每个元素后将被丢弃。

这可以写成:

Array.new(10) { |index| index * 2 } #=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
与您链接到的文档中的最终表单相匹配:

new(size){| index | block}

其中创建了给定大小(10)的数组。该数组中的每个元素都是通过将元素的索引传递给给定的块并存储返回值来创建的


在您的示例中,您分配给
e
的值在初始化每个元素后将被丢弃。

是,就是这样!我被误导了,‘e’是数组的初始当前值,实际上它是当前元素的索引。官方Ruby文档没有解释传递给块的参数是数组的索引。非常感谢@在最后一种形式中,创建了给定大小的数组。这个数组中的每个元素都是通过将元素的索引传递给给定的块并存储返回值来创建的。是的,就是这样!我被误导了,‘e’是数组的初始当前值,实际上它是当前元素的索引。官方Ruby文档没有解释传递给块的参数是数组的索引。非常感谢@在最后一种形式中,创建了给定大小的数组。该数组中的每个元素都是通过将元素的索引传递给给定的块并存储返回值来创建的。