2012-04-24 51 views
0

嗨我想使用mixin來定義一些使用define_method的方法。我想這樣做如何在mixin中使用define_method?

module A 
    %w(a b c d).each do |w| 
    define_method(w) { "method #{w}" } 
    end 
end 

因此,我可以再做

class B 
    include A 
end 

B.new.C# => 'method c' 

但是,這並不工作。

我試過(幾乎)所有涉及包括,instance_eval class_eval等... nothign工作。

可以嗎?

更新

有最初在我張貼的例子語法錯誤,但是這並不是真正的問題。我只是做了這個帖子的例子,那不是真正的例子(這個帖子太長了)。

我的問題是我在我的名單%w(a, b, c, b)而不是%w(a b c b)

因此,a,定義,而不是使用a一個逗號。傻我,(雖然很難發現)。

看到它適用於你們幫我解決問題,謝謝

+1

好吧,它適用於我(R 1.8.7) – 2012-04-24 16:54:41

+1

你在你的模塊中缺少'end'。它怎麼不起作用?是否有錯誤訊息? – matt 2012-04-24 16:58:51

+0

@matt不是問題,請參閱更新。謝謝 – mb14 2012-04-25 09:25:34

回答

4

不應該模塊:

module A 
    %w(a b c d).each do |w| 
    define_method(w) { "method #{w}" } 
    end 
end 

也就是說,end失蹤。

+0

+1:它在1.8.7上工作。 – 2012-04-24 18:28:05

+0

謝謝,那不是問題,請參閱我的更新 – mb14 2012-04-25 09:25:03

相關問題