Rubyにはポリモーフィズムが存在しますか? Ruby はポリモーフィズムをサポートしておらず、代わりにメソッドのオーバーロードとメソッドのオーバーライドをサポートしていると読みました。誰かが例を挙げてこれを明確にすることができますか?
3 に答える
4
はい、Ruby はポリモーフィズムをサポートしています。
派生クラスのインスタンスが子クラスと親クラスの両方のインスタンスである単純なクラス継承のケースを考えてみましょう。
class Parent; end
class Child < Parent; end
o = Child.new
o.is_a?(Child) # => true
o.is_a?(Parent) # => true
この例は、含まれているモジュールにも有効であることに注意してください。
a = Array.new
a.is_a?(Array) # => true
a.is_a?(Enumerable) # => true
もちろん、Ruby はダック タイピングも推奨しています。これは、ポリモーフィズムを適切にサポートするかどうかという問題に関する混乱の原因となる可能性があります。
于 2013-04-08T17:00:08.453 に答える
1
Ruby は非常にポリモーフィックな言語です。その意味で、メソッドは、オブジェクトが期待どおりに動作する限り、渡されたデータ型を自動的に推測しません。例:
def concat(a,b)
a.to_s + b.to_s
end
concat('a', 'bcd') #=> "abcd"
concat(5, 10) #=> "510"
concat([1,2,3], ' is an Array') #=> "[1, 2, 3] is an Array"
a
とb
に応答する限りto_s
、関数は期待どおりに出力します。例については、ダック タイピングの詳細を確認してください。
于 2013-04-08T17:00:28.983 に答える