【问题标题】:Confusion with singleton method defined on `Class` object与“Class”对象上定义的单例方法混淆
【发布时间】:2013-03-14 20:22:58
【问题描述】:

我所知道的单例方法可以由定义它的对象调用。现在在下面的示例中,C 也是Class 的对象和在Class 对象C 上定义的单例方法a_class_method。那么另一个Class 对象D 如何能够 打电话给a_class_method

在这个例子中对象individuation的原则如何成立?

class C
end
#=> nil

def C.a_class_method
 puts "Singleton method defined on #{self}"
end
#=> nil

C.a_class_method
#Singleton method defined on C
#=> nil

class D < C
end
#=> nil

D.a_class_method
#Singleton method defined on D
#=> nil

【问题讨论】:

    标签: ruby ruby-2.0


    【解决方案1】:

    当你做了

    puts "D's parent Classes = #{D.ancestors.join(',')}"
    

    这会给你

    D's parent Classes = D,C,Object,Kernel
    

    所以即使 D 是一个单独的类,它也是 C 的一个子类,这使它可以使用为 C 定义的方法

    【讨论】:

    • 我的意思是关于 individuation 。你说的是inheritance的正确实习生。这是理解的。但是我们通常通过我们创建的对象调用singleton 方法。现在这里是在类对象C 上创建的单例方法,但我们也可以通过类对象D 访问该方法。 -- 这就是我的困惑。
    • 好吧,我什至不知道你能做到这一点,我虽然单例方法只适用于对象而不适用于类。希望对此有更好理解的人会加入。
    • 我可以给这个投票,这可能会增加这个帖子的兴趣吗? :)
    • 昨天刚开通账户,所以我还不能投票:/显然还需要 2 个声誉
    • K 谢谢,我很想知道你得到什么回应。我做了一些搜索,因为我很好奇,我发现的所有单例东西都与在一个对象上定义一些东西有关,而不是在一个类上:objectC=C.newdef objectC.singleton_methodsomethingendD.singleton_method 那时将不存在并且C.singleton_method 也不会,因为它只是为 objectC 的单例类定义的
    【解决方案2】:

    a_class_method可用的原因是:

    D.singleton_class.superclass == C.singleton_class
     # => true
    

    【讨论】:

    • 这是另一个post - 希望你会喜欢它。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2015-06-26
    • 2012-03-04
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多