每个看似递归到2D数组的第二维

时间:2013-03-08 13:18:11

标签: ruby arrays multidimensional-array iterator

我偶然发现了这种在Ruby中迭代2维数组的方式:

[[1, 2], [3, 4]].each {|x| puts x}

输出结果为:

1
2
3
4

我的问题很简单:为什么以及如何发生这种情况?为什么Array#each似乎递归到第二维?为什么输出不如下?

[1, 2]
[3, 4]

1 个答案:

答案 0 :(得分:7)

将代码更改为:

[[1, 2], [3, 4]].each {|x| puts x.to_s}

给出预期的输出:

[1, 2]
[3, 4]

事实证明,IO#puts正在发生魔力,而不是Array#each。来自文档:

  

如果使用数组参数调用,则将每个元素写入新行。

因此,给定数组参数时,IO#puts是递归的。