我有这样的事情:
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
答案 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。