“+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 + 1或2。
- 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)`..