2017-01-04 29 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

Представлены еще более интересные значения для подчеркивания [здесь] (http://idiosyncratic-ruby.com/33-too-expressive.html#underscore-4-syntactical-meanings), например визуальный разделитель ('1_000_000') или игнорируемый параметр '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