2011-06-06 90 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

相关问题