risposta
È possibile disattivare tale comportamento con shell:strings/1
function iniziando con Erlang R16B.
Ricorda solo che questa è l'opzione globale per tutte le shell dei nodi, e potrebbe essere saggio ripristinarla dopo aver terminato di giocare la shell in nodi viventi più lunghi.
Non so se è possibile modificare il comportamento predefinito della shell, ma è possibile almeno formattare correttamente l'output, utilizzando io:format.
Ecco un esempio:
1> io:format("~p~n", [[65, 66, 67]]).
"ABC"
ok
2> io:format("~w~n", [[65, 66, 67]]).
[65,66,67]
ok
E dal momento che il guscio è solo per la sperimentazione/manutenzione, io:format()
dovrebbero essere almeno sufficiente per il vostro applicazione reale. Forse dovresti anche considerare di scrivere il tuo formato/metodo di stampa, ad es. formatPerson()
o qualcosa del genere, che formatta tutto bene.
Il problema è che la stringa non è un tipo in Erlang. Una stringa è solo una lista di numeri interi, quindi non c'è modo per la shell di distinguere una stringa stampabile da una lista generica. Non so se questa risposta alla tua domanda.
Prova a inserire '[65,66,67] .' e' [1,2,3] .' nel tuo guscio ... – Zed
@Zed: ne ero consapevole. Ma immagino di aver frainteso la domanda. Ora ho quello che sta cercando di fare. Grazie. –
Tendo a farlo anteponendo un atom alla mia lista nella shell.
ad esempio:
Eshell V5.7.4 (abort with ^G)
1> [65,66,67].
"ABC"
2> [a|[65,66,67]].
[a,65,66,67]
potrebbe anche essere [a, 65,66,67], naturalmente. ma [a | fun_that_returns_a_list()] stamperà "la cosa giusta (ish) la maggior parte delle volte"
No, non c'è modo di disattivarlo. L'alternativa migliore che trovo è quella di stampare esplicitamente il valore nella query (con io:format
) o dopo il fatto: io:format("~w\n", [v(-1)])
.
Non credo che tu possa impedirlo. La preordina di un atomo sembra un kludge: altera la tua stringa originale.
Io di solito uso le liste: flatten (String) per forzarlo su una stringa - specialmente il valore di ritorno di io_lib: format() non sempre viene stampato come una stringa. Usare le liste: flatten() su di esso lo rende unico.
Io uso il seguente "C-style":
sprintf(Format) ->
sprintf(Format, []).
sprintf(Format, Args) ->
lists:flatten(io_lib:format(Format, Args)).
As of Erlang/OTP R16B, è possibile utilizzare la funzione shell:strings/1 per attivare questa acceso o spento. Si noti che colpisce anche la stampa delle cose che sono in realtà destinati ad essere stringhe, come ad esempio "foo"
nel seguente esempio:
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]}
So di formato io: e probabilmente dovrei averlo menzionato nella domanda :) –
Questo è esattamente quello che stavo cercando quando avevo bisogno di stampare una lista di interi come una stringa. Grazie! – Matt