2016-12-01 8 views
0

putsを使用するときの出力を理解しようとしています。 putsは本当にnilを返すことを知っていますが、ハッシュで作業するときに何かを見つけました。putsの出力を理解する

putsが意図したとおりに動作していても、特定の形式ですべてのキー/値のペアを出力するようにしたいと考えていました。私はこれを防ぐ方法を考えていた。

@hash.each do |key,val| 
    puts "[#{key}] '#{val}'" 
end 

[fish] 'aquatic animal' 
[zebra] 'African land animal with stripes' 
[apple] 'fruit' 
=> {"fish"=>"aquatic animal", "zebra"=>"African land animal with stripes", "apple"=>"fruit"} 
+1

実際には「端末」は何も印刷しません。それは印刷しているコードです。端末はそれを表示します。 'ruby some_script.rb'を使ってコードを実行すると、' puts'がないので、 'each'の戻り値は表示されません。 'puts @ hash.each ...'が必要です。出力があるため、RubyではなくIRBまたはPryを直接使用しているように見えます。実際に何が起こっているのか混乱しています。 IRB/Pryは非常に便利なツールですが、Rubyインタプリタとの相違点を念頭に置いておく必要があります。 –

答えて

1

eachメソッドは常に、それはブロックが提供する値を返さない、それが反復処理されたものを返します。おそらく、これは、複数の何かを何度も実行するために複数のeachコールを連鎖させるためのものです。

ブロックを受け取るメソッドは、ブロックが返す値を使用する義務はなく、ブロックを実行する義務もありません。

As The Tin Manは実際にはirb REPLのアーティファクトであり、 "Read-Evaluate-Print-Loop"の略です。戻り値であるeach呼び出しを評価した結果が表示されています。

0

端末では、最後の方法の結果であるeachが常に出力されます。それぞれはコレクションを返すので、コレクションを出力します。コードを少し変更してnilを返すことができます。長い出力はできません。

@hash.each do |key,val| 
    puts "[#{key}] '#{val}'" 
end; nil