2013-09-21 24 views
1

我是ruby的新手。檢查IRB中實例方法的類別

在內Irb命令行我可以檢查方法屬於什麼類,例如:to_s(其屬於String類):

to_s method... belongs to String Class

然而,當我做同樣的添加方法(which belongs to the ThreadGroup class)..它沒有告訴我的課程。我不明白。

add method..belongs to ThreadGroup class

任何人能解釋這是爲什麼?感謝您的任何提示。

注:我編輯了我的to_s屏幕截圖以進行說明。

+1

除非顯示代碼生成的GUI結果,否則不要使用屏幕截圖。對於這個問題,你應該使用實際的文字;複製並粘貼到問題中。這樣,即使是那些文字也可以被搜索,並被其他需要相同幫助的人發現。通過這樣做,您可以使Stack Overflow對其他人更有用。 –

+0

謝謝@TheTinMan ..我沒有想過那樣。將來會做。 – Tom

回答

3

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 
+1

好的,所以它通常只會返回類,如果它屬於'對象'類?我在最後一分鐘測試了這堂課的許多方法,這似乎證實了你說的話。 – Tom

+1

不,如果您正在調用的方法返回某些內容,它將返回該類。但是在irb中,只能調用對象中存在的方法。或者你在某個對象的實例上調用它:'1.class#=> Fixnum','「foo」.class#=> String',':foo.class#=> Symbol','「foo」.to_i .class => Fixnum ... – spickermann

4

to_s.class不返回String,因爲它屬於String類。它返回String,因爲to_s返回String。如果您在irb中致電to_s,它將返回"main",什麼是String

因爲Main對象不響應,所以不能直接在irb中調用add