我偶然发现了这种在Ruby中迭代2维数组的方式:
[[1, 2], [3, 4]].each {|x| puts x}
输出结果为:
1
2
3
4
我的问题很简单:为什么以及如何发生这种情况?为什么Array#each
似乎递归到第二维?为什么输出不如下?
[1, 2]
[3, 4]
答案 0 :(得分:7)
将代码更改为:
[[1, 2], [3, 4]].each {|x| puts x.to_s}
给出预期的输出:
[1, 2]
[3, 4]
事实证明,IO#puts
正在发生魔力,而不是Array#each
。来自文档:
如果使用数组参数调用,则将每个元素写入新行。
因此,给定数组参数时,IO#puts
是递归的。