如果我输入
1.1.coerce(1)
Fixnum
被强制执行Float
:
[1.0,1.1]
但是当我尝试时:
1.coerce(1.1)
我得到了:
[1.1,1.0]
为什么?
答案 0 :(得分:1)
继续阅读:http://www.ruby-doc.org/core/Numeric.html#method-i-coerce
强制(数字)→数组
如果数字与num的类型相同,则返回包含numeric和num的数组。 否则,返回一个数字,其中包含一个数字,num表示为Float对象。
Ruby使用这种强制机制来处理混合型数值运算:旨在在运算符的两个操作数之间找到兼容的公共类型。
答案 1 :(得分:1)
在某种意义上,数字的子类之间存在层次结构,即一个类的实例可以转换为另一个类而不会丢失信息,反之则不然。 hierarchy会发生(实际上,Rational
和Float
之间的顺序与我相反,我不知道为什么会这样):
Fixnum -> Bignum -> Rational -> Float -> Complex
如果您有Fixnum
和Float
,则可以将Fixnum
实例转换为Float
而不会丢失信息,这就是所做的。如果要将Float
转换为Fixnum
,则意味着信息丢失。