1

Ruby1.8と1.9用の「TheRubyProgrammingLanguage」という本を読んでいます。この本は、if-operatorの優先順位はassignment-operatorよりも低いと述べています。これが本当なら、私はこの式がどのように機能するかを理解していません:

x = 5 if false

代入演算子の優先順位が高い場合は、if演算子の前に実行する必要があります。したがって、実行する前に5をxに割り当てる必要がありますif false

私は優先順位を誤解していますか?

4

2 に答える 2

1

割り当ての優先順位が高いということは、式がに評価され(x = 5) if false、に評価されないことを意味しますx = (5 if false)。後でも完全に有効な式であることに注意してください。

特定の各句が実行されるかどうかは、言語規則によって決定されます。たとえば、三項演算子では、またはが実行されるa ? b : cだけで、両方は実行されません。bc

違いについて編集
します。

ではx = (5 if false)、割り当てが最初に処理されます。しかし、それを完了するには、割り当ての残りの部分、つまり、に評価されるnilため、が必要です。したがって、式は。と同等です。 5 if falsenilx = nil

では(x = 5) if false、条件演算子が最初に処理されます。その規則に従って、最初に条件(false)を評価する必要があります。なのでfalse、これ以上やることはなく、評価結果はですnil

それが明確であることを願っています。

于 2010-12-15T14:41:54.880 に答える
0

<expr> if <condition>は1つの表現ではないからです。これはRubyの特別な構文上の砂糖です。次のように機能します。

if <condition>
    <expr>
end

ここで、明らかに、である可能性があるため<expr>、後でのみ評価する必要があります。<condition><condition>false

于 2010-12-15T14:46:50.863 に答える