Как передать несколько аргументов в трепетании

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, поскольку она может быть построена только из основных строительных блоков, которые поставляются с языком.

0
задан sadek 30 March 2019 в 23:33
поделиться