2011-08-25 53 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! 
相關問題