2016-01-26 1 views
0

я бегу через некоторое Elixir Коаны и наткнулся на следующую:Elixir Коаны - Enum.take с отрицательными числами Печатает ASCii

think "taking some items the other way" do 
    numbers = 1..10 
    assert Enum.take(numbers, -2) == __? 
    end 

Потратив много времени на это, я, наконец, посмотрел на него в IEX и Я получаю:

'\t\n' 

После еще экспериментирования:

Enum.take(numbers, -4) == '\a\b\t\n' 
Enum.take(numbers, -5) == [6, 7, 8, 9, 10] 

Почему это печать из ASCii SOMET imes и список, который я ожидаю в другое время? Что происходит в 7?

+0

Связанные: HTTP: // stackoverflow.com/questions/25978873/avoid-converting-numbers-to-characters-in-erlang – aronisstav

ответ

2

От Elixir FAQ

Довольно печать списков производятся с использованием нативной функции Erlang. Он предназначен для печати списков в виде строк, когда все элементы списка являются действующими кодами ASCII.

В 7 у вас есть BEL '\ а' (а-для 'предупреждения' AFIAK)

В 6 у вас есть ACK, по-видимому, не имеют печати представление

+0

Итак, почему добавление нулевой или любой строки в конце списка заставляет его печатать правильно? – ChrisBarthol

+0

Потому что тогда это не список печатных кодов ASCII. –

+0

А с тех пор, как последние два я печатаю, недействительны. – ChrisBarthol

Смежные вопросы