Kann ich drucken Listen von kleinen ganzen Zahlen als Strings in Erlang-Shell zu deaktivieren?

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

  •  23-09-2019
  •  | 
  •  
War es hilfreich?

Lösung

Sie können ein solches Verhalten mit shell:strings/1 Funktion deaktivieren mit Erlang R16B zu starten.

Denken Sie daran, dass diese Option für alle Knoten Schalen global ist, und es könnte sinnvoll sein, sie spielen nach Beendigung einstellen zurück ist Shell in mehr lebenden Knoten.

Andere Tipps

Ich weiß nicht, ob es möglich ist, das Standardverhalten der Schale zu ändern, aber Sie können zumindest Format Ihrer Ausgabe korrekt, mit io. Format

Hier ist ein Beispiel:

1> io:format("~p~n", [[65, 66, 67]]).
"ABC"
ok
2> io:format("~w~n", [[65, 66, 67]]).
[65,66,67]
ok

Und da die Schale nur für das Experimentieren / Wartung ist, io:format() zumindest genug für Ihre reale Anwendung sein sollte. Vielleicht sollten Sie auch Ihre eigenen Format / Druckverfahren berücksichtigen zu schreiben, zum Beispiel formatPerson() oder so ähnlich, die alles schön formatiert.

Ich neige dazu, es zu tun, indem ein Atom zu meiner Liste in der Schale vorangestellt wird.

Beispiel:

Eshell V5.7.4  (abort with ^G)
1> [65,66,67].
"ABC"
2> [a|[65,66,67]].
[a,65,66,67]

könnte auch [a, 65,66,67], natürlich. aber [a | fun_that_returns_a_list ()] wird "das Richtige (ish) die meiste Zeit" drucken

Ab Erlang / OTP R16B , können Sie die Funktion shell:strings/1 drehen diese ein- oder auszuschalten. Beachten Sie, dass es wirkt sich auch auf Dinge drucken, die eigentlich gemeint sind Strings, wie "foo" im folgenden Beispiel sein:

1> {[8,9,10], "foo"}.
{"\b\t\n","foo"}
2> shell:strings(false).
true
3> {[8,9,10], "foo"}.   
{[8,9,10],[102,111,111]}

Nein, es gibt keine Möglichkeit, sie zu deaktivieren. Die beste Alternative finde ich ist es, entweder den Wert explizit in der Abfrage ausdrucken (mit io:format) oder nach der Tat zu tun: io:format("~w\n", [v(-1)])

.

Ich glaube nicht, dass Sie es verhindern können. Voranstellen ein Atom scheint wie eine Flickschusterei -. Es Ihre ursprüngliche Zeichenfolge ändert

ich in der Regel Listen verwenden: abflachen (String), um sie zu zwingen, einen String - vor allem die Rueckgabewert von io_lib: Format () nicht immer als String drucken. Mit Listen: abflachen () auf, um es einer macht

.

Ich verwende den folgenden "C-Stil":

sprintf(Format) ->
     sprintf(Format, []).
sprintf(Format, Args) ->
    lists:flatten(io_lib:format(Format, Args)).

Das Problem ist, dass die Zeichenfolge kein Typ in Erlang ist. Ein String ist nur eine Liste von ganzen Zahlen, so gibt es keine Möglichkeit für den Shell eine druckbare Zeichenfolge aus einer generischen Liste zu unterscheiden. Weiß nicht, ob diese Antwort auf Ihre Frage.

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