3

次のエラーが表示されるのはなぜですか。

irb >> x == "AN" && arr.include? ("bar")
 SyntaxError: (irb):80: syntax error, unexpected tLPAREN_ARG, expecting $end
x == "AN" && arr.include? ("bar")
                           ^

しかし、これはうまくいきます:

x == "AN" && (arr.include? ("bar"))

これを行っているようです: ( x == "AN" && arr.include? ) && ("bar"). ここのあいまいさは何ですか?

4

2 に答える 2

3

議論の間隔をあけるべきではありません。混乱を招く解釈につながります。

x == "AN" && arr.include?("bar")

あいまいさは、("bar")が引数なのか、それとも何か他のものなのかを判断しようとすることにあります。

スペースを逃れる場合もありますが、一般的には入れたくない習慣です。

于 2013-09-13T16:54:42.600 に答える
2

&&は非常に優先順位が高いため、次のirbように解析しています。

x == ("AN" && arr.include?) ("bar")
# Syntax error

エラーにつながります(特に と の間のスペースのためinclude?(

評価の順序が正しいことを確認するために、括弧を使用することができます。

(x == "AN") && arr.include?("bar")
# true / false

この場合、次も使用できますand

x == "AN" and arr.include? ("bar")
# false / true 

優先順位が低くなります。

于 2013-09-13T16:54:55.093 に答える