1

継承階層を持つクラスを Ruby で定義しようとしていますが、基底クラスのメソッドの 1 つを派生クラスで使用したいと考えています。ねじれは、私がいる正確なメソッドを呼び出したくないということです。別のメソッドを呼び出したいのです。以下は機能しませんが、それは私がやりたいことです(基本的に)。

class A
    def foo
        puts 'A::foo'
    end
end

class B < A
    def foo
        puts 'B::foo'
    end
    def bar
        super.foo
    end
end
4

2 に答える 2

5

おそらく、これはあなたが望むものですか?

class A
  def foo
    puts 'A::foo'
  end
end

class B < A
  alias bar :foo
  def foo
    puts 'B::foo'
  end
end

B.new.foo # => B::foo
B.new.bar # => A::foo
于 2011-04-23T06:25:50.920 に答える
0

より一般的な解決策。

class A
  def foo
    puts "A::foo"
  end
end

class B < A
  def foo
    puts "B::foo"
  end
  def bar
    # slightly oddly ancestors includes the class itself
    puts self.class.ancestors[1].instance_method(:foo).bind(self).call
  end
end

B.new.foo # => B::foo
B.new.bar # => A::foo
于 2015-12-05T20:44:23.727 に答える