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