我有一个常数
TYPES = %w(car truck)
我想以dynalically定义自定义分配方法
TYPES.each do |type|
define_method "#{type}s=(objects)" do
但它不起作用, 当我打电话
myobject.cars=objects
我收到的错误方法虽然可以跟踪但不存在
puts myobject.methods
确实有一个方法
cars=(objects)
答案 0 :(得分:2)
define_method
需要方法名称,而不是签名。
define_method "#{type}s=" do |objects|
puts objects
end
答案 1 :(得分:1)
你必须写这样的东西才能使它发挥作用:
define_method "#{type}s=" do |objects|
答案 2 :(得分:0)
define_method(symbol) { block } → symbol
实际的方法是在块中,块的参数是实际方法的参数。以下是Ruby文档的描述。
在接收器中定义实例方法。方法参数可以是Proc,Method或UnboundMethod对象。如果指定了块,则将其用作方法体。使用instance_eval来评估此块,因为define_method是私有的,所以这一点很难证明。 (这就是我们在这个例子中使用发送黑客的原因。)