Почему `(var || = true) = false` выдает синтаксическую ошибку? - PullRequest
2 голосов
/ 23 января 2012

Я не понимаю, почему

(var ||= []) << 1

работает как положено, но

(var ||= true) = false

не работает.

Может кто-нибудь объяснить, почему это не работает и чтоздесь происходит?

Ответы [ 2 ]

12 голосов
/ 23 января 2012

a ||= b ведет себя как a || a = b.

Присвоение возвращает присвоенное значение, т.е. var = true возвращает true.

var ||= true будет соответствовать присвоению var = true, потому что var не определено в этой точке. Если определено var и его значение равно true, будет возвращено значение var, то есть true; если оно ложно, он вернет значение true, то есть true.

var ||= [] возвращает [], и ваше первое выражение оценивается как [] << 1, что является законным.

Однако ваше второе выражение оценивается как true = false, что приводит к ошибке компиляции.

Т.Л., др

(var ||= []) << 1(var = []) << 1[] << 1

(var ||= true) = false(var = true) = falsetrue = false

3 голосов
/ 23 января 2012

В первом случае у вас есть объект, и вы используете его метод <<.

Во втором случае у вас есть присваивание, где правое выражение должно быть присвоено переменной слева,не объекту или выражению.

...