Elixir实际上是否需要两组相等的运算符(正常和严格)?

时间:2018-08-08 06:16:11

标签: elixir

我正在学习Elixir,刚刚了解了两对等式运算符==!====!==。我认为Elixir具有两组相等运算符是错误的。他们为比较int和float的情况创建了一个“严格”相等运算符。请注意,按值比较整数和浮点数的这种情况是比较两个不同类型时导致类型比较而不是值比较的运算符正常工作方式的一个例外。 因此,我们为类型比较规则添加了一个例外,并添加了两个运算符来支持该例外。收益是多少?因此,可以将值与整数和浮点数进行比较,这是大多数人认为不良编程习惯的操作,而且很少见。

严格相等运算符的功能应该存在于普通运算符中。这样,当比较任意两个不同类型时,行为将是统一的。对于整数和浮点数,在精度较低的值会转换为其他类型并随后按值进行比较的情况下,不会有特殊情况。该图表需要更新

number < atom < reference < function < port < pid < tuple < map < list < bitstring 变成这样,

ints < floats < atom < reference < function < port < pid < tuple < map < list < bitstring

现在,我们不需要额外的运算符对,并且我们删除了在比较int和float时发生的异常,从而为我们提供了一个统一的类型比较规则。

如果需要比较int和float,则可以在进行比较操作之前对其进行转换/强制转换。

当本来可以将所有需要的功能打包到一对等号运算符==!=中的时候,添加另外两组等号运算符的原因是什么?

1 个答案:

答案 0 :(得分:2)

Elixir需要与Erlang兼容。 Erlang具有这种行为,并且在语言中的某些地方都依赖于此。

使用您提供的更新图表,8 > 1.58 == 8.0都将返回false,这实际上是没有意义的,因为它们都是数字并且可以进行数学比较。

我确实同意您的看法,即您很少将整数与浮点数进行比较(如果有的话)(我不记得我在15年的开发过程中诚实地做到了),但是该语言在内部使用为了使操作员最有意义,并通过设计为您提供了该操作员供您自己使用。