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