2017-01-04 4 views
23

ただ興味があります。Rubyの '_'(アンダースコア)での不思議な振る舞い

あなたはIRBとタイプ_を開くと、応答としてnilを取得します:

irb(main):001:0> _ 
=> nil 

そして、あなたはその値を変更することができます

irb(main):002:0> _ = 'some value' 
irb(main):003:0> _ 
=> "some value" 

をしかし、あなたが使用して新しい変数を作成した場合_、その値は変更されます:

irb(main):004:0> foo_bar = 'other value' 
irb(main):005:0> _ 
=> "other value" 

なぜですか?これは設計上の決定ですか?

+1

というように、実際には便利な機能です。前回の操作の結果を保存したい場合は、 'a = _'を実行します。私はしばしば便利な電卓として 'irb'を使うので、' _/1e6'など簡単に連鎖できます。 – tadman

+0

ビジュアルセパレータ( '1_000_000')のように、アンダースコアのいくつかの楽しい意味が、[Here](http://idiosyncratic-ruby.com/33-too-expressive.html#underscore-4-syntactical-meanings)または無視されたパラメータ 'object.each {| _、v | ...} ' – engineersmnky

答えて

34

irbは、最後に計算された式の値を参照するために_を使用します。したがって、前の行で使用しなくても_が変更されたことがわかります:)

+0

http://rubyquicktips.com/post/342527837/console-tip-retrieve-the-last-return-value-with – Suborx

16

irb内では、_は前の操作の結果を返します。したがって、新しいirbセッションを開くと、以前の操作がなかったので、

2.0.0p353 :001 > 4 
=> 4 
2.0.0p353 :002 > 3 + _ 
=> 7 
関連する問題