我的my_class
包含my_method
行为A. my_module
我的行为B采用相同的方法。
想要动态修改my_class
的行为,我尝试使用元编程在运行时更改方法。
如何让my_class
有行为A,然后将其更改为行为AB或B,然后再回到A?
我想将以前版本的源代码保存在历史数组中,以便我能够检索旧版本并恢复它,但另一个线程告诉我,我们不能只获取方法的源代码。
小例子:
class MyClass
def my_method
puts "Hello"
end
end
module World
def my_method
puts " World !"
end
end
然后,在运行时我可以调用my_method,结果为“Hello”,然后让模块中的方法扩展该方法,它将打印“Hello World!” (在两行中,这不是重点,我不寻求“合并”它们)
答案 0 :(得分:1)
这并没有使用扩展程序,但我认为它更接近你的追求:
class MyClass
def initialize
@nodes = []
@nodes.push( ->() {"hello 0"})
@nodes.push( ->() {"hello 1"})
@nodes.push( ->() {"hello 2"})
end
def my_method(version = 0)
@nodes[version].call
end
end
my_instance = MyHelloClass.new
my_instance.my_method
#=> 'hello 0'
my_instance.my_method(1)
#=> 'hello 1'
my_instance.my_method(2)
#=> 'hello 2'