In Elixir, einzelne Strings in Anführungszeichen sind ganz verschieden von Doppelsaiten zitiert. Einzelne Anführungszeichenfolgen sind im Grunde Listen von Ganzzahlen, wobei jede Ganzzahl ein Zeichen darstellt. Daher werden sie auch Zeichenlisten genannt. Sie werden hauptsächlich für die Kompatibilität mit Erlang verwendet, da so Erlang-Saiten funktionieren. Sie können nur einzelne Strings in Anführungszeichen verwenden, wie Sie Listen verwenden würden:
iex> hd('a')
97
iex> [97 | rest] = 'abcd'
'abcd'
iex> rest
'bcd'
iex> 'ab' ++ rest = 'abcd'
'abcd'
iex> rest
'cd'
Die Match-Funktion für einzelne Strings in Anführungszeichen wie folgt aussehen würde:
def match('a' ++ rest), do: 1
def match(_), do: 0
Elixir wird die Liste auszublenden, von Ihnen und zeigt sie als eine Zeichenfolge, wenn alle Ganzzahlen gültige Zeichen darstellen. Dazu verleiten, Elixir Sie die interne Darstellung einer Zeichenliste angezeigt, können Sie ein 0
, einfügen, die ein ungültiges Zeichen ist:
iex> string = 'abcd'
'abcd'
iex> string ++ [0]
[97, 98, 99, 100, 0]
Allerdings würde man in der Regel verwenden Sie doppelte Anführungszeichen in Elixir, weil dieser Griff UTF- 8 richtig, sind viel einfacher zu arbeiten und werden von allen internen Elixir-Module (zum Beispiel die nützliche String
Modul) verwendet. Doppel Strings in Anführungszeichen sind Binärdateien, so können Sie sie wie jede andere binäre Art behandeln:
iex> <<97, 98, 99, 100>>
"abcd"
iex> <<1256 :: utf8>>
"Ө"
iex> <<97>> <> rest = "abcd"
"abcd"
iex> rest
"bcd"
iex> "ab" <> rest = "abcd"
"abcd"
iex> rest
"cd"
Die Match-Funktion für doppelte Anführungszeichen würde wie folgt aussehen:
def match("a" <> rest), do: 1
def match(_), do: 0
Elixir wird verstecken die interne Darstellung von binäre Zeichenfolgen auch. Offenbaren sie, können Sie wieder legen Sie eine 0
:
iex> string = "abcd"
"abcd"
iex> string <> <<0>>
<<97, 98, 99, 100, 0>>
Schließlich zwischen einzelnen Strings in Anführungszeichen und doppelte Anführungszeichen konvertieren können Sie die Funktionen nutzen to_string
und to_char_list
:
iex> to_string('abcd')
"abcd"
iex> to_char_list("abcd")
'abcd'
sie zu erkennen, Sie können is_list
und is_binary
verwenden. Diese arbeiten auch in Wächterklauseln.
iex> is_list('abcd')
true
iex> is_binary('abcd')
false
iex> is_list("abcd")
false
iex> is_binary("abcd")
true
Zum Beispiel die doppelten Anführungszeichen Version kompatibel mit einzelnen Strings in Anführungszeichen zu machen:
def match(str) when is_list(str), do: match(to_string(str))
def match("a" <> rest), do: 1
def match(_), do: 0
Ich habe eine Frage zu dieser Codezeile: "iex> [97 | rest] = 'abcd'" Ich verstehe, warum es funktioniert, aber es ist nicht sehr lesbar. Gibt es eine Möglichkeit, etwas Ähnliches wie "iex> ['a' | rest] = 'abcd'" zu tun? – epotter
Deshalb habe ich ein Beispiel mit dem Listenverkettungsoperator '++' hinzugefügt. Alternativ in binäre Zeichenfolge konvertieren :-) –
@epotter: '[? A | rest] = 'abcd'' – Kabie