是否有可能强制失败救援声明?

时间:2012-05-10 18:20:19

标签: ruby

我正在循环浏览几个不同的属性,寻找未设置为""

的内容

要做到这一点,我写道:

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

基本上,如果第一个声明中的逻辑失败,我希望它能够被拯救。

也许救援不是正确的决定。你会推荐什么?

3 个答案:

答案 0 :(得分:3)

如果您希望rescue发生,则需要引发异常 -

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

答案 1 :(得分:2)

首先,def是一个隐含的begin,因此您可以自救。但是,根据您的有限描述,我认为这应该适合您:

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

它返回第一个设置的电子邮件地址或“未定义”。我的版本更像是如何描述问题(采用第一组电子邮件地址或返回“未定义”),mu的版本更紧凑,可能是我使用的。

答案 2 :(得分:1)

  

也许救援不是正确的决定。你会推荐什么?

你是对的,rescue不是正确的决定;例外情况适用于特殊情况,不适用于本地流量控制。我使用find

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

或者,如果Rails(或其中的一部分)出现,你可以这样说:

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