我不理解以下示例中该块产生的结果:
下面的数组初始化:
my_arr = Array.new(10) { |e| e = e * 2 }
产生以下结果:
[0 2 4 6 8 10 12 14 16 18]
虽然我期望:[0 0 0 0 0 0 0 0 0 0]
。在我看来,元素e并未初始化,因此充其量充其量只能是零(尽管我希望是'nil'),并且零乘以某个数字总是返回零。或者我希望它是几何级数,而不是算术级数。所以为什么 ???所以一定有我想念的东西。
和以下代码:
my_arr = Array.new(10) { |e| e = e + 2 }
产生以下结果:
[2, 3, 4, 5, 6, 7, 8 , 9, 10, 11]
虽然我期望:[0 2 4 6 8 10 12 14 16 18]
。在我看来,元素e并未初始化,因此充其量最好为零(尽管我期望为“零”)。因此,它应该是2而不是1的算术级数。为什么?
我检查了红宝石参考资料,找不到任何线索来理解这些如此不直观的结果。
这个想法来自这里http://www.tutorialspoint.com/ruby/ruby_arrays.htm
我认为关键在于解释e
应该代表什么价值?
可以这样写:
Array.new(10) { |index| index * 2 } #=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
与您链接到的文档中的最终形式匹配的形式:
new(size) {|index| block }
创建给定大小(10)的数组的位置。通过将元素的索引传递到给定的块并存储返回值来创建此数组中的每个元素。
e
每个元素初始化之后,在示例中分配给您的值将被丢弃。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句