Elixir имеет два типа строк: двоичные файлы (двойные кавычки) и списки символов (одиночные кавычки). Последний вариант наследуется от Erlang и внутренне представлен как список целых чисел, которые сопоставляются с кодовыми точками строки.
Когда вы используете такие функции, как inspect
и IO.inspect
, Elixir пытается быть smart и форматировать список целых чисел в виде строки для удобства чтения. Однако в некоторых случаях вы получаете бессмысленную строку только потому, что все целые числа в вашем списке являются действительными кодовыми точками. Например, символы от A до Z представлены как целые числа от 65 до 90 в ASCII.
iex> IO.inspect [65, 66, 67]
'ABC'
Если вам нравится печатать необработанный список, вы можете использовать опцию charlists: :as_lists
. Для полного списка опций запустите iex
и введите h Inspect.Opts
.
iex> IO.inspect [65, 66, 67], charlists: :as_lists
[65, 66, 67]
С Elixir & lt; 1.4, вы можете использовать char_lists: false
.
Кстати, это не единственный случай, когда Elixir скрывает от вас базовые строительные блоки, это также происходит с двоичными файлами (двойными кавычками) и структурами.
Более глубокая причина этого заключается в том, что у Elixir и Erlang нет пользовательских типов, поэтому нет возможности различать список и одну строку с кавычками, потому что оба являются просто списками. Однако это также может быть сильным в других ситуациях. Например, это позволяет нам тривиально сериализовать любую структуру данных в Elixir и Erlang, поскольку она может быть построена только из основных строительных блоков, которые поставляются с языком.