为什么`(var || = true)= false`抛出语法错误?

Kar*_*tle 2 ruby variable-assignment

我不明白为什么

(var ||= []) << 1
Run Code Online (Sandbox Code Playgroud)

按预期工作但是

(var ||= true) = false
Run Code Online (Sandbox Code Playgroud)

没有.

任何人都可以解释为什么它不起作用,这里发生了什么?

Júl*_*tos 12

a ||= b表现得像a || a = b.

赋值返回指定的值,即var = true返回值true.

var ||= true将评估分配var = true,因为var在那时未定义.如果var定义了它的值true,它将返回值var,即true; 如果它是假的,它将返回值true,即true.

var ||= []返回[],并将您的第一个表达式计算为[] << 1,这是合法的.

但是,您的第二个表达式求值为true = false,这会引发编译错误.

TL;博士

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

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