Ruby 在IRB中检查实例方法的类

Ruby 在IRB中检查实例方法的类,ruby,class,methods,Ruby,Class,Methods,我对ruby是新手 在Irb内的命令行中,我可以检查a类方法所属的类,例如:to_s(它属于String类): 但是,当我对add方法执行相同操作时)。。它没有告诉我上课的时间。我不明白这一点 有人能解释为什么会这样吗?谢谢你的提示 注意:我已将我的编辑为_s屏幕截图以作澄清。是类线程组的实例方法,而不是实例。可以调用类的实例,但不能调用方法Object类没有任何名为add的方法,因此您得到了一个合法错误。在顶层的self,即main,是Object类的一个实例 self.instance_

我对ruby是新手

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

但是,当我对add方法执行相同操作时)。。它没有告诉我上课的时间。我不明白这一点

有人能解释为什么会这样吗?谢谢你的提示

注意:我已将我的
编辑为_s
屏幕截图以作澄清。

是类
线程组的实例方法,而不是实例。可以调用类的实例,但不能调用方法
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_.class

to_s # => "main"
self.to_s # => "main"
to_s.class # => String
是类
ThreadGroup
的实例方法,而不是实例。可以调用类的实例,但不能调用方法
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_.class

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

to_.class
不会返回
String
,因为它属于
String
类。它返回
String
,因为
to
返回
字符串。如果您在irb中调用
to_s
,它将返回
“main”
,什么是
字符串


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

to_s.class
不会返回
String
,因为它属于
String
类。它返回
String
,因为
to
返回
字符串。如果您在irb中调用
to_s
,它将返回
“main”
,什么是
字符串


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

Ok,所以它通常只返回属于
对象的类?我在最后一分钟测试了这个类中的许多方法,这似乎证实了你所说的。不,如果你调用的方法返回了一些东西,它将返回这个类。但在irb中,您只能调用对象中存在的方法。或者在某个对象的实例上调用它:
1.class#=>Fixnum
“foo.class#=>String
:foo.class#=>Symbol
“foo”。to_i.class=>Fixnum
…好的,所以它通常只会返回属于
对象的类?我在最后一分钟测试了这个类中的许多方法,这似乎证实了你所说的。不,如果你调用的方法返回了一些东西,它将返回这个类。但在irb中,您只能调用对象中存在的方法。或者在某个对象的实例上调用它:
1.class#=>Fixnum
“foo”.class#=>String
:foo.class#=>Symbol
“foo”。to_i.class=>Fixnum
。除非显示代码生成的GUI结果,否则不要使用屏幕截图。对于这个问题,你应该使用实际文本;复制并粘贴到问题中。这样,即使是文本也可以被其他需要同样帮助的人搜索和找到。通过这样做,您可以使堆栈溢出对其他人更有用。谢谢@theTinMan。。我没有那样想过。以后就可以了。除非显示代码生成的GUI结果,否则不要使用屏幕截图。对于这个问题,你应该使用实际文本;复制并粘贴到问题中。这样,即使是文本也可以被其他需要同样帮助的人搜索和找到。通过这样做,您可以使堆栈溢出对其他人更有用。谢谢@theTinMan。。我没有那样想过。将来也行。