Rubyは「包含多型」をサポートしていますか?これはダックタイピングと同じですか?Rubyは包含多型をサポートしていますか?
そうでない場合、Rubyでの多型とダックタイピングの違いは何ですか? 、あなたはそれぞれのループはクライアントコードが場合にのみ気という事実に関連ダックタイピングのおかげで(動作することを言うことができるあなたの例ではまあ
# superclass - inheritance
class Animal
def make_noise
# define abstarct method (force override)
raise NoMethodError, "default make_noise method called"
end
end
# module - composition
module Fur
def keep_warm
# etc
end
end
# subclass = is-a relationship
class Bird < Animal
# override method - polymorphism
def make_noise
"Kaaw"
end
end
class Cat < Animal
# module mixin = has-a relationship
include Fur
def make_noise
"Meow"
end
end
class Radio
# duck typing (no inheritance involved)
def make_noise
"This is the news"
end
end
class Coat
include Fur
end
animals = [Bird,Cat,Radio,Coat,Animal]
animals.each do |a|
# polymorphism or duck typing?
obj = a.new
if obj.respond_to? 'make_noise'
puts obj.make_noise
end
end
私の例は、私が確認したいと仮定しています。たとえば、多型は継承が使用される場所に限定されます。ダックタイピングはミックスインを示しています。私はこれをクリアするのに問題があります、書籍/ウィキペディアなどの情報が矛盾しているようです。 – Question