[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 + 1
或 2
.
https://stackoverflow.com/questions/67377431/