【发布时间】:2019-06-30 00:47:30
【问题描述】:
我正在读一本关于 Elixir 的书:Introducing Elixir。
在字符串比较时它说:
Elixir 提供了两个比较字符串相等性的选项,
==和===运算符。==运算符通常是最简单的,尽管另一个产生相同的结果。
如果两个运算符的含义相同,那么它们的目的是什么?
【问题讨论】:
标签: elixir
我正在读一本关于 Elixir 的书:Introducing Elixir。
在字符串比较时它说:
Elixir 提供了两个比较字符串相等性的选项,
==和===运算符。==运算符通常是最简单的,尽管另一个产生相同的结果。
如果两个运算符的含义相同,那么它们的目的是什么?
【问题讨论】:
标签: elixir
想到的一个例子是浮点数 - 它使用与字符串相同的比较函数:
iex> 1 == 1 #true
iex> 1 == 1.0 #true
iex> 1 === 1 #true
iex> 1 === 1.0 #false
对于 !==
iex> 1 != 2 #true
iex> 1 != 1.0 #false
iex> 1 !== 2 #true
iex> 1 !== 1.0 #true
值得注意的是,这些函数使用以下 Erlang 表达式:
Elixir | Erlang
== | ==
=== | =:=
!= | /=
!== | =/=
将整数与浮点数进行比较时,精度较低的项将转换为另一个项的类型,除非运算符是 =:= 或 =/= 之一。浮点数比整数更精确,直到浮点数的所有有效数字都在小数点左侧。当浮点数大于/小于 +/-9007199254740992.0 时会发生这种情况。转换策略会根据浮点数的大小而改变,否则大浮点数和整数的比较将失去传递性。
【讨论】:
== 和 === 只影响数字之间的比较。