我是红宝石新手。
在命令行中,Irb
我可以检查方法属于哪个类,例如:(to_s
属于String
该类):
但是,当我对 add 方法(属于ThreadGroup
类)执行相同操作时。它并没有告诉我类。我不明白这个。
谁能解释这是为什么?感谢您的任何提示。
注意:我已经编辑了我的to_s
屏幕截图以进行澄清。
我是红宝石新手。
在命令行中,Irb
我可以检查方法属于哪个类,例如:(to_s
属于String
该类):
但是,当我对 add 方法(属于ThreadGroup
类)执行相同操作时。它并没有告诉我类。我不明白这个。
谁能解释这是为什么?感谢您的任何提示。
注意:我已经编辑了我的to_s
屏幕截图以进行澄清。
to_s.class
不返回String
,因为它属于String
类。它返回String
是因为to_s
返回 a String
。如果你调用to_s
irb 它返回"main"
,什么是String
.
您不能add
直接调用 irb,因为Main
对象不响应它。
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