在逻辑运算符之前,我是否必须在ruby函数调用中使用括号?

时间:2016-01-07 15:54:59

标签: ruby

''.instance_of?(String) && 0 == 0是真的,但是

''.instance_of? String && 0 == 0给出 TypeError: class or module required

我必须在&&之前使用括号,还是错误?

2 个答案:

答案 0 :(得分:4)

这不是一个错误。这两件事意味着不同的事情。

它的要点是&&||逻辑运算符的优先级高于方法调用。因此,instance_of?方法的调用结果为String && 0 == 0,即truetrue不是一个类,因此是错误。

另一方面,andor的优先级较低,因此

''.instance_of? String and 0 == 0

会像你期望的那样工作。

在这种情况下,最好放括号。

答案 1 :(得分:0)

实际上它并不是一个错误。 虽然Ruby方法调用中的括号是可选的,但当它变得模糊时,可能需要括号。