2

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

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

输出是:

1
2
3
4

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

[1, 2]
[3, 4]
4

1 回答 1

7

将代码更改为:

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

给出预期的输出:

[1, 2]
[3, 4]

原来魔法正在发生IO#puts,而不是发生在Array#each. 从文档:

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

IO#puts给定数组参数时也是递归的。

于 2013-03-08T13:18:10.663 回答