迭代数组数组会返回与预期不同的值

时间:2013-02-17 04:19:09

标签: ruby arrays range

1.9.3-p286 :039 > (0...x.right.first.chem_species.size).each do |atom|
1.9.3-p286 :040 >     puts x.right.first.chem_species[atom]
1.9.3-p286 :041?>   end
H
2
O
1
 => 0...2 
1.9.3-p286 :042 > x.right.first.chem_species[0]
 => ["H", 2] 
1.9.3-p286 :043 > 

为什么不输出输出 ["H",2]然后["O",1]。 (作为第二种方法返回)。这似乎不对

2 个答案:

答案 0 :(得分:2)

来自fine manual

  

puts(obj,...)→nil

     

相当于

$stdout.puts(obj, ...)

对于IO.puts

  

puts(obj,...)→nil

     

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

所以puts [1,2]以换行符分隔12

执行此操作时:

1.9.3-p286 :042 > x.right.first.chem_species[0]
 => ["H", 2] 

您允许irb显示数组,irb将使用inspect生成输出,['H', 2].inspect["H", 2]

答案 1 :(得分:0)

看起来像:

(0...x.right.first.chem_species.size).each do |atom|
  puts x.right.first.chem_species[atom]
end

可以更清楚地写成:

x.right.first.chem_species.each do |atom|
  puts atom
end