2011-06-06 69 views
5

大家好!我想知道如何在Ruby中使用語法ClassName.method_name不能調用的方法。我的頭頂有些是puts,print,gets, chomp。這些方法可以在不使用點運算符的情況下調用。爲什麼是這樣?他們來自哪裏?我怎麼能看到這些方法的完整列表?沒有類的Ruby方法?

回答

8

Kernel中的所有方法將適用於所有類ObjectObject派生的任何類。您可以使用Kernel.instance_methods來列出它們。

+0

非常感謝你:) – Kvass 2011-06-06 22:25:37

+1

不完全正確,因爲他們將可用於其類的子類'Obejct'的對象。基於'BasicObject'的類的實例不會有'Kernel'方法。 – 2011-06-06 23:25:49

+1

@ Marc-André:謝謝!糾正。 – 2011-06-06 23:33:36

1

他們來自Kernel模塊,每個類自動包含模塊。那些

irb(main):001:0> class Foo 
irb(main):002:1> end 
=> nil 
irb(main):003:0> Foo.included_modules 
=> [Kernel] 
+0

較短:'Class.new.included_modules'。 :-) – 2011-06-06 22:04:04

+0

@chris:絕對:) – xinit 2011-06-06 22:05:07

+2

對不起,但「自動包含」可能會誤導,並且不太正確......誤導,因爲聽起來像是包含'Kernel'的操作是由Ruby完成的,但它只是簡單的因爲新類有'Object'作爲祖先,'Object'包含'Kernel'。在'Object'中包含任何其他模塊,您將獲得相同的效果; 'Kernel'沒有什麼特別之處。這是不正確的,因爲從'BasicObject'分類的類不會包含'Kernel'。 – 2011-06-06 23:22:58