在包含在类中的Module中使用define_method?

时间:2011-08-25 16:09:39

标签: ruby-on-rails ruby module metaprogramming

我有这样的事情:

module MyModule
    define_method(:foo){ puts "yeah!" }
end

class User
  include MyModule
end

但是这不能按预期工作......它们没有定义。 此外,我需要使用模块,因为我想区分方法和普通的用户方法。我喜欢这个:

MyModule.instance_methods

请帮助..我错过了什么? 我也尝试过:

module MyModule
  (class << self; self; end).class_eval do
    define_method(:foo){ puts "yeah!" }
  end
end

也不起作用:/

澄清......我想用:

User.first.foo

MyModule.foo

2 个答案:

答案 0 :(得分:8)

如果您想要一个类方法,以下方法将起作用

module MyModule
    define_singleton_method(:foo){ puts "yeah!" }
end

MyModule.foo
# >> yeah!

答案 1 :(得分:8)

您始终可以使用extend self技巧:

module MyModule
  define_method(:foo){ puts "yeah!" }

  extend self
end

这样可以使该模块成为mixin和singleton。