2015-12-13 63 views
0

我试图找出这些多态之间的差异。我无法找到关于Ad-Hoc多态性的很多材料。多态性,参变多态性,特殊多态性

我想说多晶现象是参数多态性,但通常被称为多态现象?我是否正确地承担这一点?

我知道多态性可以用于继承,但我不确定它可以提供哪些其他属性。

如果有人可以帮助定义这些类型的多态性,也许尝试给出明显的差异,那将是很好的。

谢谢!

注意:Python中的每个示例都很棒。

+1

几个月后,我回答了一个非常类似的问题。 [看看](http://stackoverflow.com/a/11732581/697630)。我认为它包含在Luca Cardeli论文中的参考文献就是您要找的。 –

+0

非常感谢!我现在看看。 –

回答

3

多态性是一般的概念。 Ad-hoc多态性和参数多态性是概念的专业化。 (根据the relevant Wikipedia article,还存在其他类型的多态性。)

即席多态也称为函数重载,它指的是使用类型系统来精确地解析将调用哪个方法。因此,我们可能有两个函数,都称为fn,其中一个接受int参数,而另一个接受String参数,并根据要传递的参数类型选择正确的调用函数。

参数多态性基本上是泛型的使用。因此,Collection<T>接口可以说是多态的,因为它可以用作Collection<Integer>Collection<String>,而不是。名称“参数”是指通用参数的存在。据我所知,python没有强大的类型概念,它也不支持泛型(C++术语中的“模板”),所以这些概念可能不适用于Python。但是,我没有Python的实际经验,所以我可能是错的。也许别人可以启发我们。

+0

好的,谢谢!所以为了确保我理解它:参数多态是使用泛型,它允许将任何类型传递给函数并由该函数处理?在ML中,我可以做'有趣的gen x = x; val gen = fn:'a - >'a.'然后我可以用一个整数或实数来调用gen,它会适当地处理它。我对adhoc仍然很不确定,但我会环顾四周,看看我能否找到任何示例。谢谢! –

+0

@ChrisMulheron我很抱歉,因为我的目标是清楚地解释这些事情*,显然,如果你仍然留下问题,我没有达到目的。我不知道ML是什么,(机器学习?),我不明白'fun gen x = x; ...语法。也许这个问答对你有帮助:http://stackoverflow.com/questions/6725868/generics-templates-in-python –

+0

大多数机会是你很难掌握这些概念,因为所有这些多态性都是免费的蟒蛇,凭借使用鸭子打字,所以你不能看到替代将是什么。 (鱼知道它是湿的吗?)你会明白,如果你正在使用强类型的语言,如C++,Java,C#等。 –