[英]How can objects have class methods in ruby?
Object,Class,Module,NilClass都是Class的实例。
1)首先怀疑某物如何成为其自身的实例? (ie 'Class' is an instance of 'Class')
还是我的假设错了?
2)如果对象,类,模块等都是对象,那么它们如何具有类方法? 因为类方法只能从类中调用,而在对象中不存在。 (or is my assertion incorrect that Object, Class , Module are all objects ?)
3)如果对象,类,模块不是对象,那么它们是什么?
3)是否一类方法帐户用于例如缺少方法a
的Class
,并最终在方法减少算?
>> Class.methods.count
=> 82
>> a = Class.new
=> #<Class:0x1005519b8>
>> a.methods.count
=> 81
类对象确实对象。
类方法实际上是在类的本征类(单例类)中定义的方法。 这就是为什么这些方法不适用于所述类的实际实例的原因。
这是一种帮助您查看此情况的方法:首先,添加一个singleton_class
方法(如果尚未安装):
module Kernel
def singleton_class
class << self
self
end
end
end
现在,尝试以下操作:
String.instance_methods
String.singleton_class.instance_methods
Class.instance_methods
Class.singleton_class.instance_methods
c = Class.new
c.instance_methods
c.singleton_class.instance_methods
这将帮助您了解类实例中可用的方法,以及类中的方法是哪些方法(即,类的singleton类的实例)。
(您可以将false
参数传递给每个instance_methods
调用,以查看为该类定义了哪些方法,而不是任何超类。)
Ruby核心由Class
, Object
, Module
和Kernel
。 它们是预定义的,因此Class
类可以是其自身的实例。
它们之所以具有类方法,是因为它们也是类(并且类是对象)。
我还不能回答。 我必须找出答案中缺少思考的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.