Ruby &引用+;1“;给我不同于“的结果”+;1“;用红宝石? [6]撬(主)>[1,2,3]。最小值+1 => [1] [7] 撬(主)>[1,2,3]。最小+1 => 2
我被吹走了。我想这一定与Ruby &引用+;1“;给我不同于“的结果”+;1“;用红宝石? [6]撬(主)>[1,2,3]。最小值+1 => [1] [7] 撬(主)>[1,2,3]。最小+1 => 2,ruby,Ruby,我被吹走了。我想这一定与min函数有关吧?因为在Ruby中,max有同样的问题,但不是sum空格在Ruby中很重要,至少有时是这样 如果您说x+1,那么Ruby将+解释为二进制加法运算符,因此它被视为类似x.+(1)的方法调用 如果您说x+1,那么Ruby将+解释为一元加号运算符(AKA),将空格解释为方法调用,因此表达式作为一个整体被视为x(+1),或者更明确地解释为x(1.+@()) 类似x的表达式・ y(对于某些操作员・)可以用不同的方式解释,因为方法调用括号(有时)是可选的。它可以被看作
min
函数有关吧?因为在Ruby中,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)
[1,2,3].min() + 1
您调用的参数为1
,这将:
使用整型参数n
且无块,返回最多包含n个元素的新数组,按每个方法的升序排列
:
因此产生了[1]
结果
将括号添加到[1,2,3].min+1
中可以得到:
[1,2,3].min(+1)
[1,2,3].min() + 1
Ruby采用可选参数n
,该参数以数组形式返回最小的n
项。当您在+
的左侧放置一个空格,但在右侧没有空格时,这意味着您需要一个一元正1作为可选参数,从而得到[1]
。在+
的两边都有空格或两边都没有空格将被解析为希望在min
的结果中添加空格
[10,11,12].min#=>10
[10,11,12].分钟(+1)#=>[10]
[10,11,12].分钟(+2)#=>[10,11]
[10,11,12].min+2#=>[10,11],因为在Ruby中括号通常是可选的
[10,11,12]。min+1#=>11,不带空格,解释为加法而不是一元数+
[10,11,12].min+1#=>两侧的11个空格,也可解释为加法
请注意,只有在不使用显式括号并强制Ruby猜测时,空格才起作用<代码>[1,2,3]。min(+1)
与.min(+1)
相同。@meagar-True,我添加了一些注释。