我已经动态创建了一个类,并且我正在尝试向该类添加方法。假设一个字符串表示需要通过此方法评估的命令。
a = "puts x"
myobject.metaclass.send(:define_method, k){|x|
// cannot do this, obviously
eval(a)
}
感谢您的帮助。
编辑:
k也来自该文件,仅仅在ruby中编写类而不是将备用文件格式作为类来编写是微不足道的,但我想尽可能简单地创建模板。看起来像......
generic
do_something:
environment1:
foo arg1 arg2
environment2:
bar arg
baz arg
我知道调用该方法的方法以及该方法需要做什么。我在运行时确定每个类实例的适当环境,我似乎无法动态地向该方法添加语句。
答案 0 :(得分:2)
您可以使用class_eval
。
a = <<-CODE
def foo(x)
puts x
end
CODE
myobject.class.class_eval a
<强>更新强>
你能做这样的事吗?
new_method = <<-CODE
def #{k}(*args)
#{a}
end
CODE
myobject.class.class_eval new_method
假设你有:
k = some_method
a = puts args
new_method = <<-CODE
def #{k}(*args)
#{a}
end
CODE
myobject.class.class_eval new_method
myobject.some_method 1, "foo", "bar"
然后输出:
1
foo
bar