为什么单词中的析取和连词需要括号?

时间:2014-08-05 22:38:56

标签: ruby argument-passing

在参数位置的单词(orand)中的分离和连词需要额外的括号,而不是||&&

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

为什么他们需要额外的括号?

1 个答案:

答案 0 :(得分:3)

我认为这是因为逻辑组合运算符andor的{​​{3}}低于方法的参数列表,所以当找不到另一个列表参数或括号时,解析器会失败。 / p>

另一方面,逻辑运算符&&||具有更高的优先级,因此它们的参数会更快地被计算,然后表达式的结果作为参数传递给方法。

独立括号更改关联,因此foo (1 or 2)确实有效,1因此传递给foo方法。