我们有map!
,reject!
,reverse!
,rotate!
等功能。我们还有简短形式的二进制操作,如+=
,-=
。
我们有数学round
的东西吗?我们需要使用a = a.round
,重复变量名称对我来说有点奇怪。你知道如何缩短它吗?
答案 0 :(得分:2)
至于破坏性方法,因为数字是不可变的,所以是不可能的,这是没有意义的。您想要一个表现为5.2
的数字5
吗?
至于语法糖,如果每种方法都有一个,那就太乱了。所以没有。由于语法糖是在核心级别定义的,因此您无法在普通的Ruby脚本中执行任何操作来创建新的。
答案 1 :(得分:2)
好的,聪明的家伙已经解释过,为什么Float#round
没有语法糖。只是出于好奇,我要展示,你如何自己[部分]实施这种糖。由于Float
类没有定义~@
方法,并且您经常进行舍入,因此您可以使用monkeypatch Float
类:
class Float
def ~@
self.round # self is redundant, left just for clarity
end
end
或者,在这个简单的例子中,只是(信用@sawa):
alias_method :~@, :round
现在:
~5.2
#⇒ 5
a = 2.45 && ~a
#⇒ 2
由于Numeric
是不可变的,所以仍然无法在原地进行修改,但上述内容可能会为每个舍入节省四次键盘命中率。
答案 2 :(得分:1)
Ruby的数值类型是不可变的:它们是值对象。因此,您将找不到任何改变数字的方法。
因为数值类型是不可变的,所以可能使用可变数字进行某些优化。例如,在c-ruby中,可以指向任何类型对象的引用通常是指向对象的指针。但是如果引用是Fixnum,那么引用包含整数本身,而不是指向Fixnum的实例。 Ruby做了一些神奇的技巧来隐藏这个优化,看起来整数确实是Fixnum的一个实例。
使数字变为可变会使这种优化变得不可能,所以我不认为Ruby会有可变的数字类型。