方法调用如何与运算符优先级交互?

Ivo*_*rie 1 ruby methods operator-precedence

我很好奇方法调用与运算符优先级有何关系。在 irb 中,我看到了这个:

var = puts(5)
5
=> nil
var
=> nil
Run Code Online (Sandbox Code Playgroud)

这意味着对 put 的调用比赋值运算符具有更高的优先级,因为 nil (puts(5) 的返回值)被分配给 var,而不是方法调用本身。因为 nil 被赋值给 var (正如我们在第 4 行看到的),我猜想 put(5) 在赋值运算符之前被调用。

这个Stackoverflow 线程中,每个人都同意方法调用的优先级低于每个运算符。

然而,网站列出了 . 作为方法调用的运算符,并表示它是最高优先级的运算符。

如果第二个网站确实准确,我不确定是否存在隐含的 . 当您在 main 上调用方法时,请使用 . 运算符(因此关于 . 作为高优先级运算符是否足以解释上面的 irb 会话)。

一般来说,我对 Ruby 在遇到一行代码时执行操作的顺序感到好奇,因此,如果您知道任何以可访问的方式解释这一点的资源,我将有兴趣阅读它们。

编辑:感谢到目前为止的回答。也许我对我的基本问题不够清楚,这些问题是理论上的而不是实际的(所以可以说是“过度思考”,取决于你想思考的程度):

  • 是 。技术上是操作员,还是技术上不是操作员?
  • 有没有 。每次调用方法时都在幕后的某个地方?
  • 运算符是 Ruby 决定以什么顺序计算一行代码的基本方式,还是除了运算符及其优先级/关联性/数量之外还有其他因素?

谢谢

Ser*_*sev 5

你想太多了。你的表情基本上是这样的x = something因此,必须先评估右侧,然后才能进行赋值。