我的问题是,“为什么语言设计师会考虑允许在不同数据类型之间进行比较?”。另外,这在功能语言中更有意义吗?
例如,在erlang中,可以执行以下比较:
%% Tuples are greater than numbers
999999 < {1,2}.
true
%% Lists are greater than tuples
{90000} < [1].
true
%% Atoms are greater than numbers
1 < false.
true
在python 2.x中,
p = lambda x,y: x+y
p > (1)
True
p < (1)
False
p == (1)
False
虽然看起来像python社区认为这毕竟不是一个好主意:
始终是不同类型的对象 比较不平等,并订购 一贯但任意。 [...] 这种不寻常的比较定义 用来简化定义 排序和in和等操作 不在运营商。 source
从Python 3发行说明:
订购比较运算符(&lt;, &lt; =,&gt; =,&gt;)引发TypeError异常 当操作数没有时 有意义的自然顺序从而, 表达式如1&lt; '',0&gt;无或 len&lt; = len不再有效,并且 例如无&lt;无引发TypeError 而不是返回False。一个 推论是排序一个 异构列表不再制作 感觉 - 所有元素都必须 相互比较。 source
这种解释原因,但我想知道是否有其他理由允许这一点,特别是在函数式语言中。
答案 0 :(得分:1)
在动态语言中,它具有一定的意义,因为能够对异构列表进行排序并构建异构树是很好的。而且我想我会说它不是那么多功能性语言,因为它是强类型语言,这是显而易见的原因。