2015-05-22 3 views
1

Из того, что я понимаю, a ||= 7 означает следующее: если a имеет значение, продолжайте использовать это значение, но если это не один, а затем установить его на 7.Рубин || = оператор, действующий забавную

Вот что происходит.

Если у меня есть a и b как:

a = true 

b = false 

затем

a ||= b=> верно

(в моей интерпретации: так как 'а' ДЕЙСТВИТЕЛЬНО имеет значение, это остается тем, что не приравнивается к «ложному» - настолько хорошему.)


Однако, если у меня есть они перешли вверх, как:

a = false 

b = true 

затем a ||= b=> верно

так что в этом случае моя логика не работает, так как она должна возвращать ложь , поскольку «поскольку« a »имеет значение, ему не следует присваивать значение« b », что, очевидно, происходит здесь.

Я что-то упустил?

+0

Хорошее обсуждение '|| =' (и '&& =') [здесь] (http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488. HTML). Также обратите внимание, что поскольку 'a || = b' переопределит любое значение ложности (например,' nil' и 'false'), вы не хотите использовать его для переменных, которые могут иметь законные значения' false' или 'nil '. – Amadan

+0

Подробнее. http://stackoverflow.com/questions/995593/what-does-or-equals-mean-in-ruby – mttr

+0

Спасибо за ответ, mttr. Я ценю это. – metrazol

ответ

7
a ||= b 

эквивалентно

это означает b значение присваивается, если aa является falsy, т.е. false или nil.

Смежные вопросы