没有类的Ruby方法?

没有类的Ruby方法?,ruby,Ruby,大家好!我想知道Ruby中没有使用语法ClassName.method\u name调用的方法是如何工作的。我脑子里想不出的是放,打印,获取,咬。这些方法可以在不使用点运算符的情况下调用。为什么会这样?他们来自哪里?我怎样才能看到这些方法的完整列表呢?内核中的所有方法将可用于类对象的所有对象或从对象派生的任何类。您可以使用Kernel.instance\u方法来列出它们。它们来自每个类自动包含的Kernel模块。那些 irb(main):001:0> class Foo irb(main)

大家好!我想知道Ruby中没有使用语法
ClassName.method\u name
调用的方法是如何工作的。我脑子里想不出的是
打印
获取
。这些方法可以在不使用点运算符的情况下调用。为什么会这样?他们来自哪里?我怎样才能看到这些方法的完整列表呢?

内核
中的所有方法将可用于类
对象
的所有对象或从
对象派生的任何类。您可以使用
Kernel.instance\u方法来列出它们。

它们来自每个类自动包含的
Kernel
模块。那些

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

甚至更短:
类。新。包含的\u模块
:-)抱歉,但是“自动包含”可能会产生误导,而且不太正确。。。这听起来像是Ruby完成了包含
内核的操作,但这只是因为新类将
对象
作为祖先,而
对象
包含
内核
。在
对象
中包含任何其他模块,您将获得相同的效果;
内核没有什么特别之处。这是不完全正确的,因为从
BasicObject
子类化的类将不包含
Kernel
。基于
BasicObject
的类实例将不会有
内核
方法。@Marc André:谢谢!更正,酷。我冒昧地从您的答案中删除了
Kernel.methods
,因为它还包括
Kernel
单例方法,如果有的话,这些方法不包括在
对象中(例如
def Kernel.foo;end