次のコードがあります。組み合わせた以外は、実際には 3 つの別々のスクリプトです。Main
クラスは、2 つのTest
クラスが継承するものです。out
彼らは、開発者が望むことを何でも行うメソッドを定義するかもしれません。これは、人々がout
独自のクラスで独自のメソッドを定義できるように、プラグイン スタイルの一種の設計であることを意図しており、メイン プログラムがこれらのカスタム クラスの 1 つを選択すると、次のように言うことができます。
some_test.run
そして、out
実行されるメソッドを実装することを決定した場合。
run
明示的に記述する必要がないように、メソッドを実装するより良い方法はありself.class.method_defined?
ますか? オブジェクトは任意のオブジェクトである可能性があり、呼び出しの前に独自のクラス名を配置するためにメソッドをTest
上書きする必要はありません。run
method_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