`each`方法改变了它的行为吗?

时间:2013-03-03 15:51:25

标签: ruby

关于多维数组的Ruby练习说,访问多维数组的内部元素需要两个each方法实例。以下内容:

x = [[1,2],[3,4],[5,6]]
x.each do |a|
  a.each do |b|
    puts b
  end
end

应该返回:

# 1
# 2
# 3
# 4
# 5
# 6

但是,没有必要使用两种each方法。如果我只是做

x.each { |a| puts a }

我得到了相同的结果。似乎each的单个实例已经进入多维数组的内部层。

在这种情况下,我将如何访问第一级?换句话说,我将如何获得以下内容?

# [1,2]
# [3,4]
# [5,6]

3 个答案:

答案 0 :(得分:3)

Ruby中有三种不同的打印功能。让我们在Ruby提示符下尝试它们:

> puts [1,2]
1
2
=> nil

> p [1,2]
[1, 2]
=> [1, 2]

> print [1,2]
[1, 2]=> nil

如果您不熟悉irb,胖箭头=>后面的表达式是语句的返回值。

答案 1 :(得分:1)

此外,如果你这样做

puts x

你会得到完全相同的结果。这是因为puts以特殊方式处理数组。它枚举所有元素并单独调用它们puts。 (这是递归的,正如你可能想象的那样)。

这将大致得到您想要的输出:

x.each {|a| p a}

x.each {|a| puts a.inspect }

输出

# >> [1, 2]
# >> [3, 4]
# >> [5, 6]

答案 2 :(得分:0)

x.each { |a| puts a }

这将调用放在x数组的每个元素上。

与做:

相同
puts [1,2]
puts [3,4]
puts [5,6]

加上一个数组会像你看到的那样格式化它。