0
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]

その nil の配列の原因は何ですか? マップは完全に機能しますが、これらのゼロが発生します!

4

2 に答える 2

0

問題は、 #map が配列を別の配列に変換するように設計されていることです。通常、#map のブロックには副作用はありません。#map を使用して、配列内のすべての数値を 2 倍にする例を次に示します。

[1, 2, 3].map { |n| n * 2}    # => [2, 4, 6]

ループの目的が副作用 (要素の出力など) だけである場合は、代わりに #each が必要です。

[1, 2, 3].each { |n| puts n }
# => 1
# => 2
# => 3

この場合、#each の戻り値は気にしません。私たちが気にかけているのは、各数値が出力されることだけです。

于 2014-02-11T17:53:40.517 に答える
-1

なんて愚かなエラーでしょう。これで修正されます:

test.map {|x| puts x}

私は puts ステートメントをきれいに出力していましたが、irb は助けようとして、4 回も nil を返しました!

于 2013-10-08T19:14:14.913 に答える