ruby - 方法调用如何与运算符优先级交互?
问题描述
我很好奇方法调用与运算符优先级的关系。在 irb 中,我看到了这个:
var = puts(5)
5
=> nil
var
=> nil
这意味着对 puts 的调用比赋值运算符具有更高的优先级,因为 nil(puts(5) 的返回值)被分配给 var,而不是方法调用本身。因为 nil 被分配给 var (正如我们在第 4 行看到的那样),我猜 puts(5) 在赋值运算符之前被调用了。
在这个Stackoverflow 线程中,每个人都同意方法调用的优先级低于每个运算符。
但是这个网站列出了 . 作为方法调用的运算符,并说它是最高优先级的运算符。
如果第二个网站确实准确,我不确定是否存在隐含的 . 当您在 main 上调用方法时的运算符(因此关于 . 作为高优先级运算符是否足以解释上面的 irb 会话)。
一般来说,我对 Ruby 在遇到一行代码时执行操作的顺序感到好奇,因此,如果您知道任何以可访问的方式解释这一点的资源,我将有兴趣阅读它们。
编辑:感谢到目前为止的回答。也许我对我的基本问题不够清楚,这些问题理论上不实用(可以说是“过度思考”,这取决于你喜欢思考多少):
- 是 。技术上是操作员,还是技术上不是操作员?
- 有没有 。每次调用方法时在幕后的某个地方?
- 运算符是 Ruby 决定以什么顺序评估一行代码的基本方式,还是除了运算符及其优先级/关联性/arity 之外还有其他因素吗?
谢谢
解决方案
你多虑了。你的表达基本上是这样的:x = something
。因此,必须先评估右侧,然后才能完成分配。
推荐阅读
- android - 将 String 转换为 int 时应用程序崩溃
- uipath - 在 Google 云端硬盘和工作表中自动搜索
- python - 如何在 Google App Store Cloud Shell 中配置 pycodestyle
- python - How to get just summary line from python docstring?
- google-apps-script - 如何在 Google Apps 脚本中设置计时器?
- scrapy - 刮痧和尊重robots.txt
- python - 如何使用熊猫根据行值条件更改列数据类型
- java - 我们可以在 selenium webdriver 中使用 for 循环的场景有哪些?
- mule - 从存储库打开并处理 Mulesoft 项目
- gradle - 如何在 IntelliJ 中调试我的 Grails 应用程序?