我正在循环浏览几个不同的属性,寻找未设置为""
要做到这一点,我写道:
def email
begin
if email1 != ""
email1
elsif email2 != ""
email2
elsif email3 != ""
email3
else
Fail
end
rescue
"Undefined"
end
end
基本上,如果第一个声明中的逻辑失败,我希望它能够被拯救。
也许救援不是正确的决定。你会推荐什么?
答案 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