【问题标题】:.each seemingly recursing into second dimension of 2D array.each 看似递归到二维数组的第二维
【发布时间】:2013-03-08 13:18:10
【问题描述】:

我刚刚偶然发现了这种在 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| p x}
  • "为什么 Array#each 似乎递归到第二维?" - each 不是,puts 是。 each 与您的问题无关。您可以(并且应该)通过提供代码来简化您的问题:puts [1, 2] 而不是您发布的内容。

标签: ruby arrays multidimensional-array iterator


【解决方案1】:

将代码更改为:

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

给出预期的输出:

[1, 2]
[3, 4]

原来魔法发生在IO#puts,而不是Array#each。来自文档:

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

所以IO#puts 在给定数组参数时是递归的。

【讨论】:

  • 是的。 Object#inspect 通常也很有用:[[1, 2], [3, 4]].each {|x| puts x.inspect} 会揭示同样的事实。
猜你喜欢
  • 2014-02-17
  • 2013-01-01
  • 2018-06-24
  • 2012-11-19
  • 2019-07-27
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
相关资源
最近更新 更多