2011-07-04 55 views
3

如果滿足某些條件,我想重新定義函數庫中某個函數的行爲,但在其他情況下執行原始函數。例如:重新定義方法

class LibraryToExtend 
    def FunctionToExtend(argument) 
    if argument == something 
     do_something_new 
    else 
     do_what_the_function_did_originally 
    end 
    end 
end 

我不認爲super會在這種情況下工作,因爲我重寫功能,而不是擴展它。

+0

誰downvoted這個? –

+0

這是[當猴子修補方法時,你可以從新實現中調用重寫的方法](http://StackOverflow.Com/q/4470108/#44712​​02)。 –

+0

這是沒有理由downvote,只是關閉作爲dup(儘管我更喜歡我的答案,這個問題'英里長'的答案) –

回答

3

確實super不會工作。您需要以某種方式保留對舊方法的引用,並通過創建alias來完成此操作。

class LibraryToExtend 
    alias :FunctionToExtend :original_function 
    def FunctionToExtend(argument) 
    if argument == something 
     do_something_new 
    else 
     original_function() 
    end 
    end 
end 

作爲一個側面說明,該公約是紅寶石的方法是在lowecase和下劃線(_)沒有駝峯(不過這只是我是淫蕩)

+0

這正是我正在尋找!我之前沒有聽說過Ruby中的別名。謝謝。 –

+0

沒問題,實際上我想補充一點,這是一個非常好的問題。增加更多上下文 –