繁体   English   中英

对象如何在ruby中具有类方法?

[英]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)是否一类方法帐户用于例如缺少方法aClass ,并最终在方法减少算?

>> 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调用,以查看为该类定义了哪些方法,而不是任何超类。)

  1. Ruby核心由ClassObjectModuleKernel 它们是预定义的,因此Class类可以是其自身的实例。

  2. 它们之所以具有类方法,是因为它们也是类(并且类是对象)。

  3. 我还不能回答。 我必须找出答案中缺少思考的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM