2012-05-09 1 views
11
class Parent 
    def test 
    return 
    end 
end 

class Child < Parent 
    def test 
    super 
    p "HOW IS THIS POSSIBLE?!" 
    end 
end 

c = Child.new 
c.test 

I Parentクラスからtest方法がすぐにreturn文を使用しているので、Childクラスのラインを印刷することが可能であってはなりません。しかし、それは確かに印刷されています。何故ですか?Rubyのreturn文はsuperキーワードでは機能しませんか?それにもかかわらず

Ruby 1.8.7、Mac OSX。

答えて

8

superは、スーパークラスのメソッド実装を呼び出すメソッド呼び出しのように機能します。あなたの例では、returnキーワードはParent::testから戻り、他のメソッド呼び出しと同様にChild::testの実行を続けます。それは他の方法であれば

+0

ああ、わかりました。しかし、私は予想していた効果をどのように達成するのだろうかと思います。 – Voldemort

+7

@Omega「return super」を試してください。 –

+0

新しい質問を投稿し、達成したいことを説明します。 – benzado

11

この文脈でsuperへの呼び出しを考えるための別の方法がある:あなたが本当にpへの呼び出しを防ぐために望んでいた場合は

class Parent 
    def foo 
    return 
    end 
end 

class Child < Parent 
    def test 
    foo 
    p "THIS SEEMS TOTALLY REASONABLE!" 
    end 
end 

c = Child.new 
c.test 
# => "THIS SEEMS TOTALLY REASONABLE!" 

、あなたはからの戻り値を使用する必要がありますsuper条件:

class Parent 
    def test 
    return 
    end 
end 

class Child < Parent 
    def test 
    p "THIS SEEMS TOTALLY REASONABLE!" if super 
    end 
end 

c = Child.new 
c.test 
# => nil 
関連する問題