Разница между двойными и тройными равными для сравнения строк в эликсире

Я читал книгу об эликсире: знакомство с эликсиром.

При сравнении строк это говорит о том, что:

Elixir предлагает два варианта сравнения строк: операторы == и ===. Оператор == как правило, самый простой, хотя другой дает тот же результат.

Какая цель иметь два оператора, если они означают одно и то же?

Ответы

Ответ 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
==     | ==
===    | =:=
!=     | /=
!==    | =/=

Из документации Erlang:

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