检查IRB中的实例方法的类

时间:2013-09-21 17:03:32

标签: ruby class methods

我是红宝石的新手。

Irb中的命令行中,我可以检查方法属于哪个类,例如:to_s(属于String类):

to_s method... belongs to String Class

但是,当我为add方法(which belongs to the ThreadGroup class执行相同操作时..它没有告诉我类。我不明白这一点。

add method..belongs to ThreadGroup class

任何人都可以解释为什么会这样吗?谢谢你的任何提示。

注意:我已编辑了to_s屏幕截图以供澄清。

2 个答案:

答案 0 :(得分:4)

to_s.class不会返回String,因为它属于String类。它会返回String,因为to_s会返回String。如果您在irb中致电to_s,则会返回"main",这是String

您无法直接在irb中调用add,因为Main对象没有响应它。

答案 1 :(得分:3)

ThreadGroup#add是类ThreadGroup实例方法,而不是实例。您可以在类的实例上调用Object#class,但不能在方法上调用{{3}}。 Object班级没有任何名为add的方法,因此您遇到了合法错误。顶级selfmain,是一个实例Object上课。

self.instance_of?(Object) # => true
self.respond_to?(:to_s) # => true
self.respond_to?(:add) # => false

to_s.class有效,因为它实际上是self.to_s.class

to_s # => "main"
self.to_s # => "main"
to_s.class # => String