1

我是红宝石新手。

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

to_s 方法...属于 String 类

但是,当我对 add 方法(属于ThreadGroup)执行相同操作时。它并没有告诉我类。我不明白这个。

添加方法..属于 ThreadGroup 类

谁能解释这是为什么?感谢您的任何提示。

注意:我已经编辑了我的to_s屏幕截图以进行澄清。

4

2 回答 2

4

to_s.class不返回String,因为它属于String类。它返回String是因为to_s返回 a String。如果你调用to_sirb 它返回"main",什么是String.

您不能add直接调用 irb,因为Main对象不响应它。

于 2013-09-21T17:12:25.363 回答
2

ThreadGroup#add是类的实例方法ThreadGroup,而不是实例。您可以调用Object#class类的实例,但不能调用方法。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
于 2013-09-21T17:05:41.790 回答