Unterstützt Ruby "Einschlusspolymorphismus"? Ist das dasselbe wie Duck Typing?Unterstützt Ruby Einschlusspolymorphismus
Wenn nicht, was ist der Unterschied zwischen Polymorphie und Duck-Typisierung in Ruby?
Kann jemand bitte unten mit meinem Beispiel illustrieren:
# 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
Mein Beispiel macht Annahmen, die ich bestätigen möchte. Zum Beispiel ist Polymorphismus darauf beschränkt, wo Vererbung verwendet wird. Duck Typing veranschaulicht Mixins. Ich habe Probleme, dies aufzuklären, es scheint widersprüchliche Informationen aus Büchern/Wikipedia usw. zu geben. – Question