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

nex*_*nex 7 ruby module metaprogramming ruby-on-rails

我有这样的事情:

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

class User
  include MyModule
end
Run Code Online (Sandbox Code Playgroud)

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

MyModule.instance_methods
Run Code Online (Sandbox Code Playgroud)

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

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

这也行不通:/

澄清...我想用:

User.first.foo
Run Code Online (Sandbox Code Playgroud)

MyModule.foo
Run Code Online (Sandbox Code Playgroud)

Jam*_*urz 8

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

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

MyModule.foo
# >> yeah!
Run Code Online (Sandbox Code Playgroud)


tad*_*man 8

你可以随时使用这个extend self技巧:

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

  extend self
end
Run Code Online (Sandbox Code Playgroud)

这具有使该模块既是mixin又是singleton的效果.