1

他の 2 つのメソッドを呼び出すメソッドがあります。

def first_method
  second_method

  # Don´t call this method when something went wrong before
  third_method
end

second_method は他のメソッドを呼び出します。

def second_method
  fourth_method
  fifth_method
end

third_method に begin/rescue ステートメントがあるとします。

def fifth_method
  begin
    # do_something
  rescue Error => e
    # 
  end
end

ここで、fifth_method がエラーをスローしたときに third_method が呼び出されるのを回避したいと考えています。Rubyでこれを最もエレガントに解決するにはどうすればよいでしょうか。

4

3 に答える 3

3

それは私にはとても明白に思えますが、とにかく

def first_method
  begin 
    second_method
  rescue
    return
  end
  third_method
end

この構造 (例外の明示的な型なし) は、例外をキャッチしStandartErrorます。

別の例外との交差を避けるために、独自の例外クラスを作成できます。

class MyError < StandardError; end

そしてそれを使う

begin 
  second_method
rescue MyError => e
  return
end

Exceptionこのタイプの例外は環境レベルからのものであり、例外はStandardErrorアプリケーションレベルのエラーを処理するためのものであるため、例外を継承しないでください。

于 2012-08-17T08:52:00.983 に答える
1

例外を使用したくない場合は、ステータスを返すだけです。

def fifth_method
  # do_something
  true
rescue Error => e
  false
end

def first_method
  if second_method
    third_method
  end
end
于 2012-08-17T09:22:02.433 に答える
1

最も簡単な方法は、fifth_method からエラー キャッチを削除し、first_method に移動することだと思います

def first_method
  begin 
     second_method

     third_method
  rescue Error => e

  end
end


def fifth_method
   # do_something

end
于 2012-08-17T08:39:31.003 に答える