问题描述
我试图将方法动态添加到类的单个实例中,然后能够实例化该修改后的类的新对象。
下面是我要完成的工作的草图。
class A
def add_new_method
define_singleton_method(:new_method) { puts("hi") }
end
end
a = A.new
a.add_new_method
B = a.singleton_class
b = B.new
显然,使用这些方法进行上述操作是相当不可能的,因为您显然不应该创建新的单例实例。什么是实现相同目标的正确方法?
解决方法
您无法在Ruby中实例化单例类,但可以编写一些代码来获得自己正在做的感觉。
我将使用一个类方法作为以下示例
class A
def add_new_method
define_singleton_method(:new_method) { puts("hi") }
self
end
def self.Enhanced
new.add_new_method
end
end
b = A.Enhanced
b.new_method
# hi