2010-08-06 62 views

回答

103

它几乎完全一样。您可以使用Objectinstance_of?方法:

"a".instance_of? String # => true 
"a".instance_of? Object # => false 

红宝石也有is_a?kind_of?方法(这2个是别名和工作完全一样),它返回true是父类的比赛之一:

"a".is_a? String # => true 
"a".is_a? Object # => true 
+1

N.B.据我所知,如果'self'是参数的子类的一个实例,则返回false。 – 2010-08-06 14:46:47

4

我已成功使用klass,它返回类对象。这似乎是Rails特定的。

示例用法:

class Foo 
end 

Foo.new.klass 
# => Foo 

Foo.new.klass == Foo 
# => true 

Foo.new.klass == "Foo" 
# => false 

还有,完成此一方法:Object.is_a?,它接受类对象作为参数,并且如果self是类的一个实例或子类的实例,则返回true 。

+3

有一个方法'对象#类':http://apidock.com/ruby/Object/class – 2010-08-06 15:24:33

+0

我希望我可以选择两个正确的答案。数组没有klass作为方法,但它确实有instance_of,但active_record abjects确实有.klass,我想。 – NullVoxPopuli 2010-08-06 16:49:22

+0

'Array.class'应该也可以。我在我的答案中混淆了,因为我正在使用的库扩展类'Object'的方法'class'。 – 2010-08-06 17:03:13

7

kind_of?is_a?是同义词。他们是Ruby的等同于Java的instanceof

instance_of?是不同的,它只返回true如果对象是一个确切的类,而不是一个子类的实例。

相关问题