2011-09-15 8 views
11

例外処理を一般的な方法として、メソッド内で使用する方法はありますか?私はそれをさらに説明しましょう。Rubyの共通メソッドとして例外処理がある

は、例えば、私は私の方法が原因で例外処理コードを、一つだけの行を必要とするにもかかわらず、以下の方法

def add(num1, num2) 
begin 
    num1 + num2 
rescue Exception => e 
    raise e 
end 
end 

def divide(num1, num2) 
begin 
    num1/num2 
rescue Exception => e 
    raise e 
end 
end 

あなたが見ることができるように

を持っている、方法が大きくなります。

は私が探しているような、よりスリム溶液(ちょうど思考)

def add(num1, num2) 
    num1 + num2 unless raise_exception 
end 

def divide(num1, num2) 
num1/num2 unless raise_exception 
end 

def raise_exception 
    raise self.Exception 
end 

上記のコードは動作しませんのでご注意ください、ちょうど私の考えです。これは可能なのでしょうか、あるいは他の良い方法がありますか?

+0

同じ効果で 'def..end'の中に' rescue'を持つことができるので、 'begin..end'を削除することで冗長性を減らすことができます。 – hammar

答えて

11
def handle_exception(&block) 
    yield 
rescue Exception => e 
    raise e 
end 

def add(num1, num2) 
    handle_exception { num1 + num2 } 
end 

def divide(num1, num2) 
    handle_exception { num1/num2 } 
end 
+0

考えられる1つの潜在的な欠点は、発生したすべてのエラーが同じ行番号 –

+0

Trueを指すことですが、これはまた、実例です。エラーを再発したばかりの場合は、最初にエラーをキャッチすることはありません。これは、一般的なエラー処理コードがある場合に便利です。 – David

+0

@David、ありがとう、これは私が欲しかったものです:D – sameera207

0

確かに、beginセクションの内側にあるメソッドにブロックを渡すことができます。

+0

すばやい返信ありがとう、私はブロックと歩留まりコードサンプルの例の使用に私を指示することができました – sameera207

+0

それはちょうどあなたが私にそれをしているようにGoogleに素早くなるでしょう:) –

+0

は、ヘルプのために:D – sameera207

4

うん、そのようなこと:

def try 
    yield 
    rescue Exception => e 
    puts 'I`m rescued' 
    end 

    def devide(num1, num2) 
    try { num1/num2 } 
    end 

ruby-1.9.2-p180 :013 > devide(5,1) 
=> 5 
ruby-1.9.2-p180 :014 > devide(5,0) 
I`m rescued 
=> nil 
+0

答えがありがとう、私はダビッドの答えを受けなければなりませんでした。私は欲しかった... – sameera207

0

なぜあなたは例外を救うんやあとがき、それを上げますか? あなたの呼び出しルーチンはあなたの例外を再び救出しなければなりません。

あなたが行うことができ

def divide(num1, num2) 
    num1/num2 
end 

begin 
    divide(1,0) 
rescue Exception => e 
    puts "Exception '#{e}' occured" 
end 

あなたは1行で例外を救出することがあります。

def divide2(num1, num2) 
    num1/num2 rescue Exception 
end 

p divide2(6,3) # -> 2 
p divide2(1,0) # -> Exception 

しかし、その後、あなたは例外が発生した情報を失うことになります。

関連する問題