2016-05-13 9 views
-1

これは起こっていて、それは私にとっては不思議なようです。繰り返しでのルビープリントのハッシュ値

次のコードは何もなく、空白行印刷しない:私は

matz.each do |k| 
    puts k 
    puts matz[k] 
end 

には

を動作することを変更した場合

matz = { "First name" => "Yukihiro", 
     "Last name" => "Matsumoto", 
     "Age" => 47, 
     "Nationality" => "Japanese", 
     "Nickname" => "Matz" 
} 

matz.each do |k| 
    puts matz[k] 
end 

をも

matz.each do |k,v| 
    puts matz[k] 
end 
の作品

誰でも任意のください説明持っているで

+2

_Sidenote_: 'hash.each {| k、v | sume_usage_of_hash_here} '**は**イディオムではありません。ループ内で反復されるオブジェクトは使用しないでください。マッパや減速機などのようなヘルパーがたくさんあり、これを避けることができます。この特定のケースでは、 'matz [k]'は第2のブロック引数として返されるので、意味をなさない。慣用的なパターンに違反すると常に誤解につながります。 – mudasobwa

答えて

4

matz.each do |k| 
    puts matz[k] 
end 

k["First name", "Yukihiro"]などのキーと値のペアを表す配列であろう。これらのペアのどれもハッシュmatzのキーではないので、puts matz[k]puts nilと同じです。

+0

なぜ、2番目の作品が動作するのですか?私が最初にkを置くと、matz [k]が働くのですか? – Serjik

+2

'puts matz [k]'は出力されません。 'puts k'によって生成された出力は' puts matz [k] '行だけを削除しようとします。 'puts ["名 "、" Yukihiro "]'を試してください。同じ出力が表示されます。 – mudasobwa

+1

2番目の 'puts matz [k]'は動作しません。 'puts k'が動作しています。 – sawa

関連する問題