2012-02-15 57 views
4

我想用一些方法編寫小類,這些方法屬於其他類,因此如何在其他類中定義方法,這些方法是現有的副本。我相信這是我不懂的metaprogramming magi。將方法從一個類複製到另一個類

class Foo 
    def initialize 
    # with blocks, I would just pass block, but this is methods 
    # so this won't work 
    Bar.class_eval(perform) 
    Bar.class_eval(process) 
    Bar.class_eval(save) 
    end 

    def perform 
    1+1 
    end 

    def process 
    # some code 
    end 

    def save 
    # some code 
    end 
end 

class Bar; end 

foo = Foo.new 
foo.perform 
#=> 2 
Bar.test 
#=> 1 

爲什麼我需要這個?我正在研究只需要三種方法就能上課的寶石。在初始化時(哪些病被隱藏在父類中)會將這些方法傳遞給不同的類。我可以用塊來做到這一點,但用方法來說,它更簡潔。

PS:這就像從一類到另一個

PSS複製方法:或者...怎麼方法轉換爲PROC,這樣我就可以把它傳遞給class_eval

+1

也許你必須使用授權? http://khelll.com/blog/ruby/delegation-in-ruby/ – Fivell 2012-02-15 13:23:38

+0

你不能只包含一個模塊嗎? – 2012-02-15 13:24:59

+0

@Fivell,也許!我需要現在閱讀關於代表團 – fl00r 2012-02-15 13:26:06

回答

12

要轉換一種可以像Proc一樣調用的方法,使用obj.method(:method_name)。這會給你一個綁定方法對象,當call編輯時,將調用obj。如果你想在同一個類的不同對象上調用它,你可以調用method.unbind.bind(different_obj)

這仍然不允許您將方法從一個類複製到另一個類。如果您希望允許用戶傳遞定義3個方法的類而不是傳遞3個方塊,那麼如果您在內部存儲對該類(或其實例)的引用並根據需要調用方法。這就是評論「授權」的人的意思。或者,您可以讓用戶通過一個模塊,並且根據需要製作您自己的類includeextend模塊。

+0

引用用戶的類對象是個好主意,實際上 – fl00r 2012-02-15 13:51:27

+0

我相信我會用到參考:)但是現在我感興趣如果可以的話在Ruby中的類之間複製方法! – fl00r 2012-02-15 13:54:26

+0

我不認爲有,但如果你找到方法,請發佈。我也想知道。 – 2012-02-15 13:57:08

相關問題