“+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 将 解释+为一元加号运算符 (AKA #+@),并将空格解释为方法调用,因此整个表达式被视为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,这将:

使用 Integer 参数n且没有块,返回一个最多包含 n 个元素的新数组,按每个方法的升序排列<=>

因此 [1]结果。

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

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

这是1 + 12

  • Note that whitespace only matters when you don't use explicit parenthesis and force Ruby to guess. `[1,2,3].min(+ 1)` is identical to `.min(+1)`..

以上是“+1”给我的结果与ruby​​中的“+1”不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>