2011-08-25 27 views
6

我得到了这样的事情:在包含在类内部的模块中使用define_method?

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

看起来没对我说: '模块MyModule的;结束' '=>无' 'class User;包括MyModule;结束' '=>用户' '模块MyModule; define_method(:foo){puts“是的!” }; end' '=>#'' User.new.foo' ''耶' => nil' 'MyModule.instance_methods' '=> [” foo“]' –

回答

8

您可以随时使用extend self招:

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

    extend self 
end 

这具有使该模块既混入和一个单身的效果。

+0

不知道”扩展自我“很高兴知道:) – nex

7

如果你想有一个类的方法,以下将工作

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

MyModule.foo 
# >> yeah! 
相关问题