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 に答える