Приоритет оператора присваивания и условные операторы
Я читаю книгу под названием "Язык программирования Ruby" для Ruby 1.8 и 1.9. В книге говорится, что оператор if имеет более низкий приоритет, чем оператор присваивания. Если это правда, то я не понимаю, как работает это выражение:
x = 5 if false
Если оператор присваивания имеет более высокий приоритет, то он должен выполняться перед оператором if. Таким образом, 5 должны быть назначены до х if false
выполнен.
Я неправильно понимаю приоритет?
2 ответа
Более высокий приоритет присваивания означает, что ваше выражение оценивается как (x = 5) if false
и не x = (5 if false)
, Обратите внимание, что позже это также совершенно правильное выражение.
Выполняется ли каждое конкретное предложение, определяется правилами языка. Например, в троичном операторе a ? b : c
, только b
или же c
будет выполнен, но не оба.
редактировать
О разнице.
В x = (5 if false)
, назначение обрабатывается первым. Но для его завершения нам понадобится левая часть задания, которая nil
, так как 5 if false
оценивает nil
, Таким образом, выражение эквивалентно x = nil
,
В (x = 5) if false
, условный оператор обрабатывается первым. Согласно его правилам, мы должны сначала оценить состояние (false
). Так как это false
больше нечего делать и результат оценки nil
,
Надеюсь, это понятно.
Так как <expr> if <condition>
это не одно выражение. Это особый синтаксический сахар Рубина. Это работает так же, как:
if <condition>
<expr>
end
где, очевидно, <expr>
должны оцениваться только после <condition>
так как <condition>
может быть false
,