我想知道是否有任何红宝石函数或方法来找出对象(类型Integer
,String
,Symbol
,等)。
您所做的假设是,如果数学运算返回的值是整数,则该值的类将是Fixnum。那是不对的。
看一看:
a = 5 puts a.class # => Fixnum b = 5.0 puts b.class # => Float
从数学上讲,5和5.0是相同的数字,并且该数字是整数。但是Ruby中的5和5.0(与许多其他编程语言一样)并不相同。一个是定点值(ergo Fixnum),另一个是浮点值(Float)。Fixnum只能表示整数,而Float可以表示整数和分数(但是我应该提一下,并不是所有分数都应该代表)。
在Ruby中,当您使用两个Fixnum执行数学运算时,将返回一个Fixnum:
a = 4 puts a.class # => Fixnum x = a ** 2 puts x # => 16 puts x.class # => Fixnum
但是,如果任何一个数字都是Float,则返回Float:
a = 4 x = a ** 2.0 puts x # => 16.0 puts x.class # => Float b = 4.0 puts b.class # => Float y = b ** 2 puts y # => 16.0 puts y.class # => Float y = b ** 2.0 puts y # => 16.0 puts y.class # => Float
您询问了如何“查找对象的类型”,而对该问题的答案是使用Object#class
方法,如上所述。但是正如您所看到的,“对象是Fixnum吗?” 和“对象是整数吗?” 是两个不同的问题。
如果您想知道Ruby中的数字是否是整数,即使它是Float,也请参考以下最佳答案:检查Float是否等于Ruby中的整数值