ruby - "+1"给我的结果与 ruby​​ 中的 "+ 1"不同?

[6] pry(main)> [1,2,3].min +1
=> [1]
[7] pry(main)> [1,2,3].min + 1
=> 2

我被吹走了。我想这一定与 min 函数有关?因为 max 有同样的问题但 sum

最佳答案

Ruby 中的空格很重要,至少有时是这样。

如果你说 x + 1然后 Ruby 解释 +作为二进制加法运算符,因此它被视为像 x.+(1) 这样的方法调用.

如果你说 x +1然后 Ruby 解释 +作为一元加号运算符(又名 #+@ )和空格作为方法调用,因此整个表达式被视为 x(+1)或者更明确地说 x(1.+@()) .

类似x ・ y 的表达式(对于某些运算符 )可以用不同的方式解释,因为方法调用括号(有时)是可选的。可以看成x(・ y)x() ・ y而Ruby选择了后者。当没有第二个空格(即 x ・y )时,Ruby 将其视为 x(・y) .事情变得更加复杂,因为 x可以是局部变量或方法调用。可选的括号和空格会给人类带来一些歧义,但不会给 Ruby 带来歧义。

因此将缺少的/可选的括号添加到 [1,2,3].min +1给我们:

[1,2,3].min(+1)

你正在调用 Array#min 参数为 1这将:

With Integer argument n and no block, returns a new Array with at most n elements, in ascending order per method <=>:

因此 [1]结果。

[1,2,3].min + 1 添加括号给我们:

[1,2,3].min() + 1

这是1 + 12 .

https://stackoverflow.com/questions/67377431/

相关文章:

flutter - 类型错误 : Cannot read property 'isSupported

amazon-ec2 - Tensorflow 安装在 AWS ec2 实例上终止

arrays - 将字符串添加到空数组给出 `NAN`

r - 为什么带有字符语句的 ifelse 不起作用?

c++ - 指向结构成员?

r - 如何将经过训练和测试的随机森林模型应用于 tidymodels 中的新数据集?

swift - 类名可以与 Swift 中的协议(protocol)名相同吗?

git - 无法访问 'https://github.com/Homebrew/brew/' : L

c++ - 我可以在没有默认初始化的情况下初始化数组的 std::unique_ptr (我只想让它

node.js - 如何从 bull js 中删除延迟的工作?