Задать вопрос
icon
@icon

Tight binding, русский эквивалент?

В литературе по Perl встречается словосочетание «xxx binds tightly» применительно к оператору, который действует на соседствующий операнд, не разбирая контекста, из-за чего, например, ошибочна конструкция

open FILE, "$file" ||  die "Can't open: $! \n";



вместо неё рекомендуется использовать

open FILE, "$file" or die "Can't open: $! \n";



потому что оператор «or» binds less tightly than ||

или же заключать в круглые скобки аргументы функции open, вот так:
open(FILE, "$file") || die "Can't open: $! \n";



Вопрос: какими русскими словосочетаниями (возможно, жаргонными) описывается данное свойство операторов?

Ведь в данном случае некорректно говорить, что приоритет оператора || больше, чем приоритет () (вызова функции), поскольку это целиком зависит от наличия или отсутствия круглых скобок в описании вызова функции.
  • Вопрос задан
  • 2754 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@MikhailEdoshin
Нет, это как раз и описывает приоритет операторов. И использование or вместо || помогает не потому, что у or приоритет ниже, чем у || (хотя это так), а потому он ниже, чем у запятой (,), в то время как у || — выше, чем у запятой.

Скобки синтаксически к операторам не относятся; парсер, работающий с таблицей приоритетов операторов, по сути, как раз расставляет скобки в выражении. А в данном случае, как я понимаю, это еще и не скобки, а и впрямь вызов функции (Perl не знаю, к сожалению). Но в любом случае, скобки в данном превращают левое выражение в неделимый атом и парсер уже никак не вытащит из него "$file" и не отнесет его к ||. Кстати, наверное, возможен еще один вариант?

(open FILE, "$file") || die "Can't open: $! \n";
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы