0

我在几个不同的属性中循环寻找未设置的东西""

为此,我写道:

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

基本上,如果它在第一条语句上的逻辑失败,我希望它能够获救。

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

4

3 回答 3

3

如果你想rescue发生,你需要提出一个例外 -

def email
  begin
    raise StandardError if email1.empty?
  rescue StandardError
    # do something
  end
end
于 2012-05-10T18:23:29.793 回答
2

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

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

它要么返回第一个设置的电子邮件地址,要么返回“未定义”。我的版本读起来更像你描述问题的方式(获取第一个设置的电子邮件地址或返回“未定义”),mu 的版本更紧凑,可能是我会使用的。

于 2012-05-10T19:23:04.650 回答
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
于 2012-05-10T19:00:28.467 回答