我刚刚偶然发现了这种在 Ruby 中迭代二维数组的方式:
[[1, 2], [3, 4]].each {|x| puts x}
输出是:
1
2
3
4
我的问题很简单:为什么以及如何发生这种情况?为什么Array#each
看似递归到第二维?为什么输出不如下?
[1, 2]
[3, 4]
我刚刚偶然发现了这种在 Ruby 中迭代二维数组的方式:
[[1, 2], [3, 4]].each {|x| puts x}
输出是:
1
2
3
4
我的问题很简单:为什么以及如何发生这种情况?为什么Array#each
看似递归到第二维?为什么输出不如下?
[1, 2]
[3, 4]
将代码更改为:
[[1, 2], [3, 4]].each {|x| puts x.to_s}
给出预期的输出:
[1, 2]
[3, 4]
原来魔法正在发生IO#puts
,而不是发生在Array#each
. 从文档:
如果使用数组参数调用,则将每个元素写入新行。
IO#puts
给定数组参数时也是递归的。