ruby的方法调用的优先级是什么

Nee*_*eed 5 ruby operator-precedence

http://phrogz.net/programmingruby/language.html#table_18.4 上面链接提供的表格只给出了 ruby​​ 运算符的优先级。方法的优先级是什么(或者我应该说:消息/函数)?

例如,当我在 irb 中输入如下内容时

Math.sqrt 2 + 2
Run Code Online (Sandbox Code Playgroud)

结果我得到了 2.0。没有优先级的明确规则,我无法决定在哪里使用括号以及在哪里省略它们。所以,请有人帮助我摆脱这种不确定性。提前致谢!

Til*_*ilo 1

在 Ruby 中,任何运算符都优先于方法调用,例如首先计算运算符。

然而,这个例子Math.sqrt 2 + 2很好地说明了省略括号会多么难以阅读和不直观。人们可能期望Math.sqrt(2) + 2在这里进行评估。

当你遇到这样的一行时,你可能会想:编码员的意图是什么?这是一个错误吗?

尽可能使用括号始终是一个好主意,以明确您想要什么,特别是当存在方法调用或多个运算符时 - 这只是良好的风格,并且是风险最低的方法(例如,不要做出假设,但使用括号使自己清楚)。

在表达式中添加额外的括号从来没有什么坏处,但将它们省略可能会造成很大的损失。

这是我最近遇到的一个很好的例子:

  def foo(arg)
    raise "error"
  end
  x = foo 4 rescue 7
  x 
    => nil    # oops!

  x = foo(4) rescue 7
  x
    => 7
Run Code Online (Sandbox Code Playgroud)

我希望这很好地说明了为什么使用括号很重要

还:

检查此处,在“调用方法”下: http: //ruby-doc.org/docs/ProgrammingRuby/html/tut_methods.html 引用:

[...] 如果没有歧义,您可以在调用方法时省略参数列表周围的括号。[...]但是,除了最简单的情况外,我们不建议这样做——存在一些微妙的问题[特别是,您必须在本身就是另一个方法调用的参数的方法调用上使用括号(除非它是最后一个参数)。]我们的规则很简单:如果有任何疑问,请使用括号。

另请参阅: http: //phrogz.net/programmingruby/language.html

  • 谷歌到底是什么?我花了十到十五分钟试图找到一个有用的页面来指向OP,但结果是空白的。过去 12 年我一直在使用 ruby​​,所以我非常清楚该使用哪些搜索词。至于tile的答案,它不仅没有帮助(正如他所看到的,如果他真的费心去正确阅读原始问题和/或实际运行查询),而且它与lmgtfy相关联,如果不是成熟的巨魔,它就是至少是无缘无故的粗鲁。 (2认同)