Ruby 中是否存在多态性?我读过Ruby不支持多态性,而是支持方法重载和方法覆盖。有人可以举个例子为我澄清一下吗?
问问题
672 次
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
,函数就会按预期输出。查看更多关于 Duck Typing 的示例。b
to_s
于 2013-04-08T17:00:28.983 回答
0
Ruby 不支持方法重载。方法重载的想法在动态类型语言中甚至没有意义。
Ruby确实支持 ad-hoc 多态性,就像地球上几乎所有的面向对象语言一样。
于 2013-04-08T22:51:00.227 回答