Wie kann ich feststellen, ob eine Liste ist eine nur eine Zeichenfolge oder eine Liste von Strings?

StackOverflow https://stackoverflow.com/questions/1406173

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe eine Variable, die entweder eine Liste von Strings oder nur einen String enthalten können. Gibt es ein guter Weg, zu sagen, welche Art ich bin den Umgang mit?

"192.168.1.18" vs. ["192.168.1.18", "192.168.1.19"]

In jedem Fall möchte ich beteiligt die Bits verwenden.

War es hilfreich?

Lösung

Wie Sie tun es viel hängt davon ab, was Sie vorhaben, mit dem Ergebnis zu tun, oder vielmehr, wie man es tun planen. Also, wenn Sie daran interessiert sind in den Bits:

case MyVar of
    [First|Rest] when is_list(First) -> ... First,Rest ...;
    _ -> ... MyVar ...
end

oder wenn Sie nicht daran interessiert sind, ziehen auseinander tatsächlich die Zeichenfolge / Liste von Strings, die Sie tun können:

if is_list(hd(MyVar)) -> ... ;
   true -> ...
end

Habe ich Sie richtig verstanden hier? Ich habe keinen Code in setzen, um tatsächlich zu prüfen, was eigentlich sein sollte Strings Strings sind, sollte dies früher getan haben werden. Eine Alternative wäre, wenn diese Zeichenfolge / Liste von Zeichenketten zu erzeugen immer es in einem der Formate zu setzen.

Andere Tipps

ich manchmal etwas schreiben wie:

case X of
    [List|_] when is_list(List) ->
        list_of_lists;
    List when is_list(List) ->
        list;
    _ ->
        not_a_list
end

Erlang implementiert verschiedene Funktionen zu testen, ob eine Liste eine flache Liste in Modul io_lib ist.

Eine gute Wahl, um Ihre besonders IP-Strings für die Überprüfung ist io_lib: latin1_char_list (Term) http://erlang.org/doc/man/io_lib.html#latin1_char_list- 1

io_lib: latin1_char_list / 1 Funktion Implementierung ist:

latin1_char_list([C|Cs]) when is_integer(C), C >= $\000, C =< $\377 ->
      latin1_char_list(Cs);
latin1_char_list([]) -> true;
latin1_char_list(_) -> false.

Wenn Sie möchten, für flache Unicode-Listen testen, die Sie verwenden können io_lib: char_list (Term) http://erlang.org/doc/man/io_lib.html#char_list- 1

io_lib: char_list / 1 Funktion Implementierung ist:

char_list([C|Cs]) when is_integer(C), C >= 0, C < 16#D800;
       is_integer(C), C > 16#DFFF, C < 16#FFFE;
       is_integer(C), C > 16#FFFF, C =< 16#10FFFF ->
    char_list(Cs);
char_list([]) -> true;
char_list(_) -> false.

Überprüfen Sie die io_lib Modul Dokumentation für andere ähnliche Funktionen.

Beachten Sie, dass , wenn einige neue erlang Funktion von Ihrem aktuellen Projekt unterstützt erlang Version fehlen Sie einfach die Implementierung neuer erlang Versionen bietet kopieren und sie in ein Modul der eigenen hinzufügen. Suchen Sie die neueste erlang / lib / * / src Quellcode und einfach erhalten Sie die neuen Funktionen, die Sie benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top