我是红宝石的新手。
在Irb
中的命令行中,我可以检查方法属于哪个类,例如:to_s
(属于String
类):
但是,当我为add方法(which belongs to the ThreadGroup
class执行相同操作时..它没有告诉我类。我不明白这一点。
任何人都可以解释为什么会这样吗?谢谢你的任何提示。
注意:我已编辑了to_s
屏幕截图以供澄清。
答案 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
的方法,因此您遇到了合法错误。顶级self
是main
,是一个实例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