Приоритет оператора присваивания и условные операторы

Я читаю книгу под названием "Язык программирования 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,

Другие вопросы по тегам