2013-05-01 96 views
1

我在比較2個文件。如果只顯示1個文件,它將創建一個副本。 當使用begin..rescue..end時,是否可以重新調用該方法?Ruby,你可以從同一個方法裏調用一個方法嗎?

def differ() 
begin 
    file_today = read_file("/etc/hosts.deny") 
    file_yesterday = read_file("/etc/hosts.deny_old") 
    content = Diffy::Diff.new(file_yesterday, file_today) 
rescue 
    copy_log 
    differ #call itself?!O_o Well, after the copy has been created! 
end 
    return content 
end 

它是「不同#call本身?!O_o那麼,複製後已經創建!」我無法工作。

回答

2

您可以在您的rescue子句中使用retry關鍵字來重新啓動它。

編輯:下面是從Programming Ruby:

免費版的一些詳細信息,「重做語句會導致一個循環重複當前迭代不過,有時候你需要風迴路直接回到最開始。重試語句只是票據,重試會重新啓動任何類型的迭代器循環,在重新啓動它之前,重試將重新評估迭代器的所有參數。

編輯:我意識到這種重試行爲已被棄用1.9。只要知道重試通常用於重新執行引發異常的代碼塊。確保你在重試之前修復了導致異常的任何內容 - 否則最終會陷入無限循環!

+0

非常歡迎:)看看我的編輯,我鏈接到一個很好的資源,用於瞭解'retry'和'redo'。如果您滿意,請將我的答案標記爲正確! – hlh 2013-05-01 22:46:15

+0

我感謝你的回答並編輯:>「copy_log」是應該修復異常的東西。我想upvote你,但我沒有名譽上的計算器:/ – M00kaw 2013-05-01 23:15:28

+0

我會捐出upvote。 – orde 2013-05-02 00:02:54

相關問題