3

Why do I get the following error:

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

But this works fine:

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

It looks to be doing this: ( x == "AN" && arr.include? ) && ("bar"). What the ambiguity here?

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 回答