test =
{:content=>"type_name", :content_length=>9, :array_index=>0},
{:content=>"product_id", :content_length=>10, :array_index=>1},
{:content=>"First Item", :content_length=>10, :array_index=>0},
{:content=>"1111", :content_length=>4, :array_index=>1}
pp test.map {|x| puts x} #=>
{:content=>"type_name", :content_length=>9, :array_index=>0}
{:content=>"product_id", :content_length=>10, :array_index=>1}
{:content=>"First Item", :content_length=>10, :array_index=>0}
{:content=>"1111", :content_length=>4, :array_index=>1}
[nil, nil, nil, nil]
这一系列的nils是什么原因?地图效果很好,但是它会导致这些无效!
答案 0 :(得分:0)
问题是#map旨在将数组转换为不同的数组。通常,#map的块不会有副作用。这里使用#map来加倍数组中的所有数字:
[1, 2, 3].map { |n| n * 2} # => [2, 4, 6]
如果你的循环的目的只是为了产生副作用(比如打印元素),你需要#each:
[1, 2, 3].each { |n| puts n }
# => 1
# => 2
# => 3
在这种情况下,我们不关心#each的返回值。我们关心的是每个数字都被打印出来。
答案 1 :(得分:-1)
唉,这是多么愚蠢的错误! 这解决了它:
test.map {|x| puts x}
我很乐意打印puts语句,irb,试图提供帮助,只返回四次!