2017-06-22 6 views
1

Rubyでは、例外を処理する親クラスメソッドと、子クラスが使用されている場合にエラーを最初に処理する子クラスを持つことが可能ですか?言い換えれば子クラスのRubyハンドルエラーが最初に発生する

class Parent 
    def eat_apples(param) 
    puts "eat apples #{param}" 
    raise "pooey" 

    rescue => e 
    puts "parent error handler" 
    end 
end 


class Child < Parent 
    def eat_apples(param) 
    super(param) 

    rescue => e 
    puts "child error handler" 
    end 
end 

それはChild.new.eat_apples('something')を呼び出し、子が親の前にエラーを処理することが可能ですか?

私はかなり親/子クラスで同じことをしたいが、機能はなぜ、スーパーを呼び出さずにメソッドを再定義していない段階

+1

いいえ、変更なしで、エラー処理を含む 'eat_apples'全体が実行されます。 –

+0

@DaveNewton、スーパーメソッドを呼び出す前に、拡張クラスのエラー処理を行うことができます。 –

+0

@BillyFergusonこれは...変更になるでしょう。 –

答えて

2

エラー処理で異なっ?

class Child < Parent 
    def eat_apples(param) 
    puts "eat apples #{param}" 
    raise "pooey" 

    rescue => e 
    puts "child error handler" 
    end 
end 
+0

あなたはピーターが何であるか知っています。 –

1

これは、あなたが処理しようとしている種類のユースケースを見ることができないため、これは最良の例ではありません。しかし、それでは、親メソッドを呼び出す前に、子エラー処理を行うことで子エラーを最初に処理できるはずだと言っています(super)。

class Parent 
    def eat_apples(param) 
    puts "eat apples #{param}" 
    raise "pooey" 

    rescue => e 
    puts "parent error handler" 
    end 
end 


class Child < Parent 
    def eat_apples(param) 
    if param != "apple" 
     raise 
    end 
    super(param) 
    rescue => e 
    puts "child error handler" 
    end 


end 
0

親クラスで例外を発生させるメソッドを作成し、発生したエラーの例外を処理する別のメソッドを作成します。子クラスのeat_applesメソッドで、例外を発生させる親メソッドを呼び出して、子プロセスに例外を処理させます。以下のように

class Parent 
    def eat_apples!(param) 
    puts "eat apples #{param}" 
    raise "pooey" 
    end 

    def eat_apples(param) 
    eat_apples!(param) 
    rescue => e 
    puts "parent error handler" 
    end 
end 


class Child < Parent 
    def eat_apples(param) 
    eat_apples!(param) 
    rescue => e 
    puts "child error handler" 
    end 
end 
1

メソッドとスーパーコールにデフォルトのパラメータを追加しますか? @Markのように親の例外をあきらめることなく、好きなように親と子の例外を自由にカスタマイズすることができます。

class Parent 
    def eat_apples(param,throwitdown=false) 
    puts "eat apples #{param}" 
    raise "pooey" 

    rescue => e 
    raise e if throwitdown 
    puts "parent error handler" 
    end 
end 


class Child < Parent 
    def eat_apples(param) 
    super(param,true) 

    rescue => e 
    puts "child error handler" 
    end 
end 

puts Parent.new.eat_apples('from parent') 
puts Child.new.eat_apples('from child') 
関連する問題