Ответ 1
Одним из примеров, который приходит на ум, является float - которые используют те же функции сравнения, что и строки:
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
== | ==
=== | =:=
!= | /=
!== | =/=
При сравнении целого числа с float термин с меньшей точностью преобразуется в тип другого термина, если оператор не является одним из =: = или =/=. Поплавок более точен, чем целое число, до тех пор, пока все значимые фигуры float не будут расположены слева от десятичной точки. Это происходит, когда поплавок больше/меньше +/- 9007199254740992.0. Стратегия преобразования изменяется в зависимости от размера float, потому что в противном случае сравнение больших поплавков и целых чисел потеряет свою транзитивность.