为什么要检查'打印阵列但不使用'检查'放每个元素?

时间:2018-05-07 21:35:31

标签: arrays ruby multidimensional-array

我有一个嵌套数组:

array_name = [
  ["Alice", "pizza", "soccer"],
  ["Steve", "sushi", "hockey"],
  ["Alex", "pasta", "none"]
]

当我在循环中使用inspect时:

array_name.each do |i|
  puts i.inspect
end

输出:

["Alice", "pizza", "soccer"]
["Steve", "sushi", "hockey"]
["Alex", "pasta", "none"]

但使用puts代替打印每个单独数组中的每个元素:

array_name.each do |i|
  puts i
end

输出:

Alice
pizza
soccer
Steve
sushi
hockey
Alex
pasta
none

为什么array_name.inspect输出整个数组?

我读到inspect尝试打印编码版本。我不知道为什么以下显示与上面第二个代码相同的输出:

array_name.each do |i|
  i.each do |sub_i|
    puts sub_i
  end
end

输出:

Alice
pizza
soccer
Steve
sushi
hockey
Alex
pasta
none

上面的第二个和第三个代码给出了相同的输出,它不是数组,而是每个数组中的实际元素。这是为什么?

1 个答案:

答案 0 :(得分:7)

实际上,这就是方法puts的行为方式。来自文档:

  

如果使用数组参数调用,则将每个元素写入新行。每个不是字符串或数组的给定对象将通过调用其to_s方法进行转换。如果不带参数调用,则输出一个换行符。

另一方面,Ruby中有p方法:

  

对于每个对象,直接将obj.inspect后跟换行符写入程序的标准输出。

以下代码将打印您期望的结果:

array_name.each do |i|
  p i
end