Можно создать дубликат:
What does ||= mean in Ruby?Что означает значение || = в Ruby?
Что ||=
означает в Ruby?
Можно создать дубликат:
What does ||= mean in Ruby?Что означает значение || = в Ruby?
Что ||=
означает в Ruby?
Он используется главным образом в качестве Shortform для инициализации переменной определенного значения, если он еще не установлен.
Подумайте о заявлении как возвращающемся x || (x = y)
. Если x
имеет значение (кроме false
), только левая сторона ||
будет evalutated (с ||
коротких circuts) и x
не будет переназначать. Однако, если x
- false
или nil
, будет оценена правая сторона, которая установит x
в y
, а y
будет возвращен (результат операции присваивания - это правая сторона).
См. http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case для дальнейшего обсуждения.
+1 забыл об этом –
'x || = y' действует как' x = y, если x', который (если мы предположим, что x и y означают произвольные выражения, а не обязательно переменные), это * не * то же самое, что либо 'x = x || y' (рассмотрите случаи, когда 'x = x' не является no-op) или' x = y, если x.nil? '(рассмотрим случай, когда x является ложным). – sepp2k
Jorg W Mittag считает, что это неверно в [его ответе] (http://stackoverflow.com/questions/995593/what-does-mean-in-ruby) на дублированный вопрос. –
Идея такая же, как и с другими подобными операторами (+=
, *=
и т.д.):
a ||= b
является a = a || b
И этот трюк не ограничивается только Ruby: он проходит через множество языков с корнями C.
Редактировать чтобы отразить downvoters.
См. Один из ссылок Йорга для более точного приближения, например this one.
Именно поэтому я не люблю Ruby: ничто никогда не кажется таким, каким кажется.
В частности, не C или C++ или Java. – SingleNegationElimination
@TokenMacGuy Я имею в виду общий «трюк»: создание «a @ = b» из «a = a @ b». –
Это неправильно. Пожалуйста, прочтите http://Ruby-Forum.Com/topic/151660 и ссылки, представленные в нем. –
x ||= y
часто используется вместо x = y if x == nil
Черт, ничего не мог найти, когда я искал. – ben