Я попробовал подобный код в Ruby:Старшинство операторов в рубин
if object && object.is? ball
object.throw!
end
Это привело к синтаксической ошибке:
unexpected tIDENTIFIER, expecting keyword_then or ';' or '\n'
Я полагаю, это потому, что & & должен иметь более высокий «приоритет ", чем вызов функции (извините, я не знаю правильную терминологию), и поэтому Ruby по сути увидел инструкцию как:
if (object && object.is?) ball
object.throw!
end
, который не имеет смысла и поэтому синтаксическая ошибка в порядке.
Это дополнительно подтверждается тем фактом, что это работа:
if object and object.is? ball
object.throw!
end
Я полагаю, это потому, что «и» имеет более низкий приоритет, чем & &, так что «приоритет» вызова функции должно быть где-то между & & и 'и'.
Однако в таблицах порядка приоритета, которые я видел ранее, вызовы функций не указаны.
Я хотел бы получить некоторое представление о том, что здесь происходит, и, возможно, некоторые ссылки на спецификацию ruby. Я не эксперт в резолюции выражения, я просто интересно узнать больше о процессах, задачах и теория позади этого примера, без сомнения, более широкой теме
* [Предшествование встроенный в Ruby, можно переопределить] (Http: //www.techotopia. com/index.php/Ruby_Operator_Precedence), окружая секцию нижнего приоритета выражения с помощью круглых скобок * так, 'object && object.is? ball' может быть как 'object && (object.is? ball)'. –