在Ruby中查找对象类型的函数

Joh*_*Doe -3 ruby

我想知道是否有任何红宝石函数或方法来找出对象(类型IntegerStringSymbol,等)。

VKa*_*atz 8

你可以调用class method对象

obj.class
Run Code Online (Sandbox Code Playgroud)

为实例

:test_1.class => Symbol
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用:instance_of? Method

puts 10.instance_of? Fixnum    #=> True
puts [1,2].instance_of? Array  #=> True
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以确定ruby​​ 中的对象类型,请参阅此


Jor*_*ing 6

您所做的假设是,如果数学运算返回的值是整数,则该值的类将是Fixnum。那是不对的。

看一看:

a = 5
puts a.class
# => Fixnum

b = 5.0
puts b.class
# => Float
Run Code Online (Sandbox Code Playgroud)

从数学上讲,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
Run Code Online (Sandbox Code Playgroud)

但是,如果任何一个数字都是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
Run Code Online (Sandbox Code Playgroud)

您询问了如何“查找对象的类型”,而对该问题的答案是使用Object#class方法,如上所述。但是正如您所看到的,“对象是Fixnum吗?” 和“对象是整数吗?” 是两个不同的问题。

如果您想知道Ruby中的数字是否是整数,即使它是Float,也请参考以下最佳答案:检查Float是否等于Ruby中的整数值