1

次のコードがあります。組み合わせた以外は、実際には 3 つの別々のスクリプトです。Mainクラスは、2 つのTestクラスが継承するものです。out彼らは、開発者が望むことを何でも行うメソッドを定義するかもしれません。これは、人々がout独自のクラスで独自のメソッドを定義できるように、プラグイン スタイルの一種の設計であることを意図しており、メイン プログラムがこれらのカスタム クラスの 1 つを選択すると、次のように言うことができます。

some_test.run

そして、out実行されるメソッドを実装することを決定した場合。

run明示的に記述する必要がないように、メソッドを実装するより良い方法はありself.class.method_defined?ますか? オブジェクトは任意のオブジェクトである可能性があり、呼び出しの前に独自のクラス名を配置するためにメソッドをTest上書きする必要はありません。runmethod_defined?

class Main
  def run
    send(:out) if self.class.method_defined?(:out)
  end
end

class TestA < Main

  def out
    p "Test A here"
  end
end

class TestB < Main

  def out
    p "Test B here"
  end
end

a = TestA.new
a.run
# will execute a's out method

b = TestB.new
b.run
# will execute b's out method
4

1 に答える 1