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

时间:2012-01-23 11:00:35

标签: ruby variable-assignment

我不明白为什么

(var ||= []) << 1

按预期工作但

(var ||= true) = false

有人可以解释为什么它不起作用以及这里发生了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

在第一种情况下,您有一个对象,并使用其<<方法。

在第二种情况下,您有一个赋值,其中右表达式必须分配给左侧的变量,而不是对象或表达式。