Почему дизъюнкция и соединение в словах требуют скобок?

Дизъюнкция и конъюнкция в словах (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

Зачем им нужны дополнительные круглые скобки?

1 ответ

Я думаю, потому что операторы логической компоновки and и or имеют более низкий precedence, чем список аргументов метода, поэтому анализатор если другой аргумент списка или закрывающая скобка не найден.

С другой стороны, логические операторы && и || имеют более высокий приоритет, поэтому их аргументы оцениваются раньше и результат выражения затем передается методу в качестве аргумента.

Автономная ассоциация изменения скобок, поэтому foo (1 or 2) работает и 1 передается в результате методу foo.

licensed under cc by-sa 3.0 with attribution.