在参数位置的单词(or
,and
)中的分离和连词需要额外的括号,而不是||
,&&
。
def foo _; end
foo(1 || 2) # => Good
foo(1 or 2) # => Syntax error
foo((1 or 2)) # => Good
foo(1 && 2) # => Good
foo(1 and 2) # => Syntax error
foo((1 and 2)) # => Good
为什么他们需要额外的括号?
答案 0 :(得分:3)
我认为这是因为逻辑组合运算符and
和or
的{{3}}低于方法的参数列表,所以当找不到另一个列表参数或括号时,解析器会失败。 / p>
另一方面,逻辑运算符&&
和||
具有更高的优先级,因此它们的参数会更快地被计算,然后表达式的结果作为参数传递给方法。
独立括号更改关联,因此foo (1 or 2)
确实有效,1
因此传递给foo
方法。