代码之家  ›  专栏  ›  技术社区  ›  dimid

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

  •  2
  • dimid  · 技术社区  · 10 年前

    ''.instance_of?(String) && 0 == 0 然而,这是真的

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

    我之前必须用括号吗 && ,还是它是一个bug?

    2 回复  |  直到 10 年前
        1
  •  4
  •   ndnenkov    10 年前

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

    其要点是 && 和 || 逻辑运算符的优先级高于方法调用。那么发生的是 instance_of? 正在调用方法,结果为 String && 0 == 0 ,这是 true . 真的 不是类,因此出现错误。

    另一方面 and 和 or 具有较低的优先级,因此

    ''.instance_of? String and 0 == 0
    

    会按照你期望的方式工作。

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

        2
  •  0
  •   sawa    10 年前

    实际上这不是一个bug。 虽然Ruby方法调用中的括号是可选的,但当它变得不明确时,可能需要括号。

    推荐文章