Xen*_*non 2 ruby arrays iterator multidimensional-array
我偶然发现了在Ruby中迭代2维数组的这种方式:
[[1, 2], [3, 4]].each {|x| puts x}
Run Code Online (Sandbox Code Playgroud)
输出是:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:为什么以及如何发生这种情况?为什么Array#each看似递归到第二个维度?为什么输出不如下?
[1, 2]
[3, 4]
Run Code Online (Sandbox Code Playgroud)
将代码更改为:
[[1, 2], [3, 4]].each {|x| puts x.to_s}
Run Code Online (Sandbox Code Playgroud)
给出预期的输出:
[1, 2]
[3, 4]
Run Code Online (Sandbox Code Playgroud)
事实证明,魔法正在发生IO#puts,而不是在Array#each.来自文档:
如果使用数组参数调用,则将每个元素写入新行.
因此IO#puts在给定数组参数时是递归的.