我学习红宝石单身,并对这些代码产生误解:
class MyClass
def self.class_singleton_mymethod
end
end
class_singleton = class << MyClass
self
end
puts class_singleton.methods.grep(/mymethod/) # => []
obj = MyClass.new
def obj.object_singleton_mymethod
end
object_singleton = class << obj
self
end
puts object_singleton.methods.grep(/mymethod/) # => class_singleton_mymethod
为什么class_singleton 不包含类的 Class 方法而object_singleton而不是 Object的单例方法包含类的 Class 方法?
答案 0 :(得分:2)
我认为你有methods
和instance_methods
混淆的概念。如果您要将methods
的所有实例替换为instance_methods
,您将看到预期的结果。
instance_methods
用于枚举类的实例具有哪些方法。 methods
用于枚举对象具有的方法。 (类对象也是对象,并且有自己的方法,如new
,这些方法不是实例方法。
例如,String#slice
是一个实例方法;您可以在字符串实例上调用slice
。另一方面,String.new
是String
本身的一种方法;你没有在字符串实例上调用new
,但你可以调用String.new
(即在String
类对象本身上)来创建一个新字符串。)
答案 1 :(得分:0)
我不确定我理解,但您是否尝试实施Singleton设计模式?
使用它为你实现的Singleton Module,你只需要包含它