我在ruby中试过这样的代码:
if object && object.is? ball
object.throw!
end
这导致语法错误:
unexpected tIDENTIFIER, expecting keyword_then or ';' or '\n'
我认为这是因为&&必须具有比函数调用更高的“优先级”(对不起,我不知道正确的术语)所以Ruby基本上将语句视为:
if (object && object.is?) ball
object.throw!
end
这没有意义,所以语法错误是有序的。
这一点得到了以下事实的支持:
if object and object.is? ball
object.throw!
end
我认为这是因为'and'运算符的优先级低于&&,所以函数调用的“优先级”必须介于&&和'和'。
但是,在我之前看到的优先顺序表中,未列出函数调用。
我希望能够深入了解这里发生的事情,也许还有一些对ruby规范的引用。我不是表达式解析的专家,我只是想更多地了解这个例子背后的过程,问题和理论,毫无疑问,这是一个更广泛的话题
答案 0 :(得分:0)
由于运营商优先权,您应该:
if object && (object.is? ball)
或
if object && object.is?(ball)
原因是“&&”和“||”优先级高于“和”和“或”。因此,如果你不使用括号“object.is?ball”,“object.is?”将首先被“&&”抓住。但是,如果使用“和”而没有括号,它可以正常工作,因为它在这种情况下具有最低优先级:
if object and object.is? ball