Типограф Эрланга вывел странные типы для строк
Я исследую Typer, и дал ему функцию, которая ничего не делает, кроме:
const_str () -> "qwe".
Тип этого парня выводится как:
-spec const_str () -> [101 | 113 | 119,...]
то есть "eqw" (да?!), за которым следует это "..." дело.
Похоже, постоянные строки сбивают с толку Typer; Я понимаю, что я не должен использовать их как это, есть атомы для этой цели; но поскольку я пытаюсь обернуть голову вокруг типера (и вариантов типа Эрланга), я подумал, что это удивительно и интересно. Кто-нибудь может объяснить, что здесь происходит? Спасибо!
1 ответ
Решение
- Строки в Erlang представляют собой списки целых чисел, которые соответствуют ASCII-коду символов (т.е.
"qwe" = [$q,$w,$e] = [113,119,101]
). - Язык типов не может выражать порядок элементов списка (и не стремится сделать это).
- Тип, который вы получили, это тип "непустого списка, содержащего числа 101, 113 и 119", который настолько близок, насколько может сделать вывод.