2012-03-09 28 views
4
私が見てきた

Rubyコード:例外を発生させる:インスタンスまたはクラスを使用しますか?クラスを使用して例外を発生させ

raise GoatException, "Maximum of 3 goats per bumper car." 

その他のコードでは、インスタンスを使用しています:

raise GoatException.new "No leotard found suitable for goat." 

これらは両方とも同じように救出されています。インスタンスとクラスを使用する理由はありますか?

答えて

9

違いはありません。例外クラスはどちらの場合でもinstiantiatedされます。

あなたはnewへの引数として、あるいはraiseの2番目の引数としていずれかの文字列を、提供した場合、それはinitializeに渡されると、例外インスタンスの.messageになります。例えば

:あなたは上記の最初のraiseコメント場合

class GoatException < StandardError 
    def initialize(message) 
    puts "initializing with message: #{message}" 
    super 
    end 
end 

begin 
    raise GoatException.new "Goats do not enjoy origami." #--| 
                 # | Equivilents 
    raise GoatException, "Goats do not enjoy origami." #--| 
rescue Exception => e 
    puts "Goat exception! The class is '#{e.class}'. Message is '#{e.message}'" 
end 

、あなたはそれが表示されます。いずれの場合も

  • initializeが呼び出されます。
  • どちらの場合でも、例外クラスはGoatExceptionで、classではなく、例外クラス自体を救済しています。
関連する問題