2016-10-30 5 views
4

Ich habe versucht, meine Hand auf . Ich fand diese seltsame Ausgabe, als ich alle Elemente der Liste um 100 erweiterte.Liste gedruckt als String in Elixir

Terminal Screenshot

Warum ein solcher Ausgang? Es stellt sich heraus, dass ich eine Zeichenfolge bekomme, wenn ich 100 addiere, aber funktioniert gut, wenn ich andere Operationen mache. Ich fummelte noch ein bisschen herum, ich bekam immer noch unerwartete Ergebnisse.

Terminal Screenshot 2

+1

Mögliche Duplikat [Elixir Listen als char Listen interpretiert ] (http://stackoverflow.com/questions/30037914/elixir-lists-interpreted-as-char-lists) – Dogbert

Antwort

7

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] 
+0

Wow! Danke für diese glatte Antwort. Ich habe diesen Teil ignoriert, während ich diese Frage gepostet habe. Danke nochmal! – srajappa

+4

Sie können IEx auch konfigurieren (über die '~/.iex.exs'), um * immer * die Charlisten als Listen von Ganzzahlen zu prüfen, mit' IEx.configure inspect: [charlists:: as_lists] ' – Uniaika

Verwandte Themen