【问题标题】:How to use define_method in a mixin?如何在 mixin 中使用 define_method?
【发布时间】:2012-04-24 16:51:59
【问题描述】:

您好,我正在尝试使用 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 等...没有任何工作。

可以吗?

更新

我发布的示例中最初存在语法错误,但这不是真正的问题。我只是为帖子制作了示例,这不是真实示例(发布时间有点长)。

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

因此,定义了a, 而不是a。傻我,(虽然很难发现)。

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

【问题讨论】:

  • 好吧,它对我有用(R 1.8.7)
  • 您的模块中缺少end。它怎么不工作?有错误信息吗?
  • @matt 这不是问题,请参阅更新。谢谢

标签: ruby metaprogramming


【解决方案1】:

模块不应该是:

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

也就是说,end 丢失了。

【讨论】:

    猜你喜欢
    • 2013-10-22
    • 2011-01-19
    • 2017-03-20
    • 2019-09-29
    • 2015-08-13
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多