2012-05-10 27 views
0

我通過幾個不同的屬性騎自行車尋找的東西沒有設置爲""是否有可能強制失敗的救援聲明?

要做到這一點,我寫道:

def email 
    begin 
    if email1 != "" 
     email1 
    elsif email2 != "" 
     email2 
    elsif email3 != "" 
     email3 
    else 
     Fail 
    end 
    rescue 
    "Undefined" 
    end 
end 

基本上,如果它失敗的第一個語句的邏輯,我想它被救出。

也許營救不是正確的決定。你會推薦什麼?

+0

很難推薦一些更好的東西,而無需提供有關預期輸入和輸出的更多細節。 –

回答

2

首先,def一個隱含的begin,這樣你就可以保存你自己。不過,從你的描述有限,我認爲這應該爲你工作:

[email1, email2, email3].reject(&:empty?).first || "undefined" 

它要麼返回第一個集電子郵件地址或「不確定」。我的版本更像是如何描述問題(取第一組電子郵件地址或返回「undefined」),mu的版本更緊湊一些,可能是我使用的版本。

3

如果你想rescue發生,你需要提高一個例外 -

def email 
    begin 
    raise StandardError if email1.empty? 
    rescue StandardError 
    # do something 
    end 
end 
+0

這就是說,它看起來像是在控制流程中使用異常,這通常不是好的做法。 –

+0

對,我同意安德魯。在這一點上更多的是出於好奇。我如何強制失敗聲明去下一次救援 – Trip

+0

的確如此。這可能是一個'else'是更好的解決方案。只是想回答所問的問題。 – x1a4

1

也許搶救不正確的決定。你會推薦什麼?

你說得對,rescue不是正確的決定;例外情況適用於特殊情況,不適用於本地流量控制。我會用find

def email 
    [email1, email2, email3, 'Undefined'].find { |s| !s.empty? } # or != '' if nils might be present 
end 

或者,如果鐵軌(或它的一部分)在旁邊,你可以這樣說:

def email 
    [email1, email2, email3, 'Undefined'].find(&:present?) 
end