0

Object 、 Class 、 Module 、 NilClass 都是 Class 的实例。

1)首先怀疑某物如何成为自身的一个实例?(i.e 'Class' is an instance of 'Class')还是我的假设是错误的?

2)如果 Object , Cl​​ass ,Module 等......都是对象,那么它们怎么会有类方法?因为类方法只能从类中调用,而不存在于对象中。(or is my assertion incorrect that Object, Class , Module are all objects ?)

3)如果 Object , Cl​​ass , Module 不是对象,那么它们是什么?

3)类方法是否解释了实例a中缺少的方法Class并最终导致方法计数减少?

>> Class.methods.count

=> 82

>> a = Class.new

=> #<Class:0x1005519b8>

>> a.methods.count

=> 81
4

2 回答 2

1

类对象确实是对象。

类方法实际上是在类的 eigenclass(单例类)中定义的方法。这就是为什么这些方法不适用于所述类的实际实例的原因。

这里有一种方法可以帮助您了解这一点:首先,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

这将帮助您了解哪些方法可用于类的实例,以及哪些方法是类上的方法(即类的单例类的实例)。

(您可以将false参数传递给每个instance_methods调用,以查看为该类定义了哪些方法,而不是为任何超类定义。)

于 2011-08-31T23:13:14.763 回答
0
  1. Ruby 核心由ClassObjectModule组成Kernel。它们是预定义的,因此Class该类可以是其自身的一个实例。

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

  3. 我还不能回答。我必须发现在答案中缺少哪种方法来思考。

于 2011-08-31T23:10:48.917 回答