我正在学习Elixir,并且刚刚了解了两对相等运算符==、!=和===以及!==。我认为Elixir有两组相等运算符是错误的。他们创建了一个“严格的”相等运算符,用于比较整数和浮点数的情况。请注意,这种通过值比较整型和浮点型的情况是运算符在比较两种不同类型时的正常工作方式的例外,这会导致类型比较,而不是值比较。因此,我们对类型比较规则进行了例外处理,并添加了两个运算符来支持该例外。回报是什么?所以整型和浮点型可以通过值来比较,这是一种大多数人认为是糟糕的编程实践的操作,也是很少见的。
严格相等运算符的功能应该存在于正规运算符中。这样,当比较任何两种不同的类型时,行为将是一致的。对于整型和浮点型,精度较低的值被转换为另一种类型,然后通过值进行比较,则不会有特殊情况。此图表需要更新
number < atom < reference < function < port < pid < tuple < map < list < bitstring是这样的,
ints < floats < atom < reference < function < port < pid < tuple < map < list < bitstring。
现在我们不需要额外的一对运算符,并且我们已经删除了比较整型和浮点型时发生的异常,为我们提供了一个统一的类型比较规则。
如果需要比较整型和浮点型,可以在比较操作发生之前对它们进行转换/转换。
当它们本可以将所有需要的功能打包成一对相等运算符==和!=时,为什么还要添加两组额外的相等运算符
发布于 2018-08-08 18:45:42
Elixir需要与Erlang兼容。Erlang有这种行为,并且在语言中的一些地方依赖于它。
使用您提供的更新后的图表,8 > 1.5和8 == 8.0都将返回false,这真的没有意义,因为它们都是数字,可以进行数学比较。
我同意你的观点,将整数与浮点数进行比较是非常罕见的(如果有的话)(我不记得我以前在超过15年的开发中诚实地做过这样的事情),但语言在内部使用这种方法来最大限度地利用运算符,并通过设计为你提供了这个运算符供你自己使用。
https://stackoverflow.com/questions/51739738
复制相似问题