为什么强制2.coerce(3.3)返回[3.3,2.0]?

时间:2014-09-23 10:20:48

标签: ruby

如果我输入

1.1.coerce(1)

Fixnum被强制执行Float

[1.0,1.1]

但是当我尝试时:

1.coerce(1.1)

我得到了:

[1.1,1.0]

为什么?

2 个答案:

答案 0 :(得分:1)

继续阅读:http://www.ruby-doc.org/core/Numeric.html#method-i-coerce

  

强制(数字)→数组

     

如果数字与num的类型相同,则返回包含numeric和num的数组。 否则,返回一个数字,其中包含一个数字,num表示为Float对象。

     

Ruby使用这种强制机制来处理混合型数值运算:旨在在运算符的两个操作数之间找到兼容的公共类型

答案 1 :(得分:1)

在某种意义上,数字的子类之间存在层次结构,即一个类的实例可以转换为另一个类而不会丢失信息,反之则不然。 hierarchy会发生(实际上,RationalFloat之间的顺序与我相反,我不知道为什么会这样):

Fixnum -> Bignum -> Rational -> Float -> Complex

如果您有FixnumFloat,则可以将Fixnum实例转换为Float而不会丢失信息,这就是所做的。如果要将Float转换为Fixnum,则意味着信息丢失。