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