8

このような演算子の優先順位に関する情報源には、、、、など!の単項演算子が代入よりも優先順位が高いと書かれています。ただし、次の表現が可能です。~+-=

!a = true # => false (with warning)
a         # => true

~a = 1    # => -2
a         # => 1

+a = 1    # => 1
a         # => 1

-a = 1    # => -1
a         # => 1

これらの結果を考慮すると、私が考えることができる唯一の説明は、これらの単項演算子は代入よりも優先順位が低いということです。もしそうなら、それは私が上で述べた情報が間違っていることを意味します. どちらが正しい?違う説明はありますか?

4

1 に答える 1

2

私のプログラミング Ruby ブック (第 2 版) には、代入よりも優先順位が高い単項演算子も記載されています。

単項演算子 IS が最も優先されます。行が ~ (a = 1) として解析される理由は、単項演算子が作用する式として単純な変数 'a' を使用することを含め、行を有効な構文に分解することが何よりも優先されるためです。

Ruby パーサーが行の残りの部分を有効にすることができた場合、(~ a) を使用していたはずですが、左辺値 '=' 右辺値のみが一致する = 何かよりも有効なルールはありません。

「有効な構文」を最優先事項と見なすことができ、次に単純な値、定数および変数名、その下の標準演算子と見なすことができます。

于 2014-02-24T17:58:18.933 に答える