2017-12-21 6 views
0

@clientが閉じられていることを確認したいのですが、通常どおり例外がスローされるようにします。接続をクローズするだけでなく、例外をスローすることも可能です

これは正しいパターですか?

@client = .... 

begin 
    # code here 
rescue 
    # ???? 
ensure 
    @client.close 
end 

私はレスキューを行う必要がありますか?

+2

あなたはちょうどrescue' 'なし' begin'と 'ensure'を使用することができ、エラーを救出気にしない限り、それ以外の場合はそうちょうど再調達エラーあなたは何を今まで行った後'rescue'ブロック内にある必要があります(例えば、Logged the errまたは) – engineersmnky

答えて

2

あなたは単にそれから、ここでの例外を除いて、「何かを」、そしてちょうどそれが通常のようにraise Dを取得できるようにしたくない場合は:あなたはがしたいん場合、

@client = .... 

begin 
    # code here 
ensure 
    @client.close 
end 

か例外、と何か:

@client = .... 

begin 
    # code here 
rescue => e 
    puts e.message # Or whatever... 
    raise e  # Then re-raise it! 
ensure 
    @client.close 
end 
+0

'確実に'がメソッドレベルに行くことができるので、例外がどこで発生するのか正確に心配していなければ、 'begin' /' end'フレームブロックを必ずしも必要としません。しかし、その場合は '@clientと@client.close'や' @client&.close'を実行して、 'nil'ハンドルを試みたり閉じたりしないようにしたいでしょう。もし' @client = ... 'がスローします。 – tadman

関連する問題