Der Wert, den Sie 'efgh'
sehen ist kein String, sondern ein Char List.
Das Ergebnis Ihrer Anweisung sollte [101, 102, 103, 104]
sein (und es ist tatsächlich), aber es gibt es nicht auf diese Weise aus. Die vier Werte in Ihrer Liste entsprechen e
, f
, g
und h
in ASCII, also iex
druckt nur ihre codepoints
anstelle der Liste. Wenn die Liste ungültige Zeichen (wie 0 oder 433 wie in Ihrem Fall) enthält, wird sie als einfache Liste belassen.
Von Elixir Getting Started guide:
A char Liste mit den Codepunkte der Charaktere zwischen einfachen Anführungszeichen enthält (beachten Sie, dass standardmäßig IEx wird nur dann ausgegeben Codepunkte, wenn eine der Zeichen außerhalb des ASCII-Bereichs) .
Beide 'efgh'
und [101, 102, 103, 104]
sind gleich in Elixir, und zu beweisen, dass Sie inspect
zwingen kann sie als eine Liste zu drucken, statt:
Enum.map([1,2,3,4], &(&1 + 100))
#=> 'efgh'
Enum.map([1,2,3,4], &(&1 + 100)) |> inspect(charlists: :as_lists)
#=> [101, 102, 103, 104]
Mögliche Duplikat [Elixir Listen als char Listen interpretiert ] (http://stackoverflow.com/questions/30037914/elixir-lists-interpreted-as-char-lists) – Dogbert