Posso disattivare gli elenchi di stampa di piccoli numeri interi come stringhe in guscio Erlang?

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

  •  23-09-2019
  •  | 
  •  
È stato utile?

Soluzione

È possibile disattivare tale comportamento con shell:strings/1 href="http://www.erlang.org/doc/man/shell.html#strings-1"> iniziando con Erlang R16B.

Basta ricordare che questa è l'opzione globale per tutte le shell dei nodi, e potrebbe essere saggio per impostare nuovamente dopo aver terminato di gioco è guscio di nodi vivere più a lungo.

Altri suggerimenti

Non so se è possibile modificare il comportamento predefinito del guscio, ma si può almeno formattare l'output in modo corretto, utilizzando io:. formato

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() deve essere almeno sufficiente per il vostro applicazione reale. Forse si dovrebbe anche prendere in considerazione di scrivere il proprio metodo di formato / di stampa, per esempio formatPerson() o qualcosa di simile, che formatta tutto bene.

Io tendo a farlo anteponendo un atomo 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 del tempo"

Come di Erlang / OTP R16B , è possibile utilizzare la funzione di shell:strings/1 per attivare questo acceso o spento. Si noti che colpisce anche la stampa delle cose che sono in realtà destinati ad essere stringhe, come "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]}

No, non v'è alcun modo per disattivarlo. L'alternativa migliore che ho trovato è a esplicitamente stampare il valore nella query (con io:format) o dopo il fatto fare: io:format("~w\n", [v(-1)])

.

Non credo che si può impedirlo. Anteporre un atomo sembra un kludge -. Esso altera la stringa originale

Io di solito uso liste: appiattire (String) per costringerlo a una stringa - in particolare la returnValue io_lib: format () non stampa sempre come una stringa. Utilizzando gli elenchi: appiattire () su di esso lo rende uno

.

Io uso il seguente "C-style":

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

Il problema è che la corda non è un tipo in Erlang. Una stringa è solo un elenco di numeri interi, quindi non c'è alcun modo per la shell di distinguere una stringa stampabile da un elenco generico. Non so se questa risposta alla tua domanda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top