Все, пришедшие в Elixir / Erlang из других языков, скорее всего, имеют некоторые ожидания относительно того, как должны работать операторы сравнения >
, <
, ==
и т. п. Можно было бы ожидать, что 1 < 2
, (и это действительно так). В принципе, можно сказать, что сравнение работает как надо. Но не всегда.
В Elixir / Erlang можно сравнивать все что угодно. Вообще. В то время как для двух операндов одного типа результат не обескураживает, как в приведенном выше примере, сравнение двух операндов разных типов приводит к довольно неожиданным последствиям. Потому что сами по себе типы «упорядочены для сравнения». Вот таким образом:
number < atom < reference < function < port < pid < tuple < map < list < bitstring
Что внезапно приводит к тому, что полностью легитимное сравнение 42 < nil
возвращает true
.