如何在mixin中使用define_method?

时间:2012-04-24 16:51:59

标签: ruby metaprogramming

您好我正在尝试使用mixin来定义使用define_method的方法。我想做点什么

module A
  %w(a b c d).each do |w|
     define_method(w) { "method #{w}" }
  end
end

所以我可以做

class B
  include A
end

B.new.c # => 'method c'

但这不起作用。

我已经尝试过(几乎)涉及包含的所有内容,instance_eval class_eval等... nothign work。

有可能吗?

更新

我发布的示例中最初出现语法错误,但这不是真正的问题。我刚刚为帖子做了一个例子,这不是真实的例子(有点太长了,不能发布)。

我的问题是我在列表中使用了逗号%w(a, b, c, b)而不是%w(a b c b)

因此,定义a,而不是a。傻傻的,(很难发现)。

看到它对你们有用帮助我解决了这个问题,谢谢

1 个答案:

答案 0 :(得分:4)

模块不应该是:

module A
  %w(a b c d).each do |w|
     define_method(w) { "method #{w}" }
  end
end

end缺失。