2014-02-26 33 views
1

我有一種方法,我定期對變量執行邏輯與,是否可以重構?這是一個2部分問題。具有多個邏輯與的重構方法

  • 有沒有短路的方式做var = var && condition
  • 有沒有更好的方式來寫這個基於多個條件,仍然只返回一個布爾?

我希望有類似+=類的東西。

def my_method 
    var = true 

    if condition 
    var = var && cond1 
    end 

    if other_condition 
    var = var && cond2 
    end 

    var 
end 
+0

'var&= condition' – iamnotmaynard

+1

你可以把所有這些'if'語句寫成一個行而不是三:'var && = cond1 if condition' – roippi

+0

或'var&= cond1 && cond2' – iamnotmaynard

回答

2

我會用語句修飾:

def my_method 
    res = true 
    res &&= cond1 if condition 
    res &&= cond2 if other_condition 
    res 
end 
+0

非常感謝您爲上面的精彩討論和乾淨的答案。 – ardavis

2
  • 是否有這樣做的VaR短路方式= VAR & &條件?

    是的。

    var &&= condition 
    
  • 有沒有更好的方式來寫這基於多個條件,仍然只返回一個布爾?

    def my_method 
        (cond1 || !condition  ) && 
        (cond2 || !other_condition) 
    end 
    

    編輯。 p11y的評論是正確的。

    如果你不喜歡它,你也可以這樣寫使用關鍵字:

    def my_method 
        (cond1 if condition  ) and 
        (cond2 if other_condition) 
    end 
    

+1

'和'和'&&'不是同義詞。 '和'是一個控制流操作符而不是布爾操作符。 –

+0

@LeoCorrea他們有不同的優先級。所以呢? – sawa

+0

我只是評論你的答案,所以那些新進入ruby的人不認爲他們可以/應該交替使用'和'/'&&'或'或'/'||'。 –