2013-07-03 77 views
3

這個問題屬於Ruby on Rails問題,但是這個簡化的問題會給我找到的解決方案。Ruby類的方法繼承,如何阻止子方法執行?

我有兩個類,子類繼承父方法,但如果在父方法中滿足某些條件,我希望執行子方法代碼的一半。

class A 

    def test_method 
    puts 'method1' 
    return false 
    end 

end 

class B < A 

    def test_method 
    super 
    #return false was called in parent method, I want code to stop executing here 
    puts 'method2' 
    end 

end 

b = B.new 
b.test_method 

,輸出是:

method1 
method2 

我所需的輸出是:

method1 

有誰知道如何實現我想要的輸出?

謝謝!

回答

3

你可以使用簡單的if-end聲明:

class B < A 
    def test_method 
    if super 
     puts 'method2' 
    end 
    end 
end 

現在,B#test_method將返回false如果超級回報false。否則,它會評估if-end區塊中的代碼。

+0

謝謝。當你看到它時,答案就簡單多了! – MichaelHajuddah

3
class B < A 
    def test_method 
    super and puts 'method2' 
    end 
end 

這樣既會跑,如果超是除了nilfalse

或者什麼,你可以使用更強的precedenced &&但這種優先級較低常被用作流量控制。

關於此請參閱Avdi's blog post