nex*_*nex 7 ruby module metaprogramming ruby-on-rails
我有这样的事情:
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
如果您想要一个类方法,以下方法将起作用
module MyModule
    define_singleton_method(:foo){ puts "yeah!" }
end
MyModule.foo
# >> yeah!
你可以随时使用这个extend self技巧:
module MyModule
  define_method(:foo){ puts "yeah!" }
  extend self
end
这具有使该模块既是mixin又是singleton的效果.