¿Puedo desactivar la impresión de listas de números enteros pequeños como cadenas en Erlang concha?

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

  •  23-09-2019
  •  | 
  •  
¿Fue útil?

Solución

Puede desactivar este tipo de comportamiento con la función shell:strings/1 href="http://www.erlang.org/doc/man/shell.html#strings-1"> comenzando con Erlang R16b.

Sólo recuerde que esta es la opción global para todas las conchas de nodos, y podría ser conveniente establecer de nuevo después de terminar el juego es la cáscara de los nodos ya que viven.

Otros consejos

No sé si es posible cambiar el comportamiento predeterminado de la cáscara, pero se puede al menos formato de la salida correcta, usando io:. formato

Este es un ejemplo:

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

Y ya que la cáscara es sólo para experimentar / mantenimiento, io:format() debe ser por lo menos lo suficiente para su aplicación real. Tal vez también se debe considerar que escribir su propio método format / impresión, por ejemplo, formatPerson() o algo por el estilo, que formatea todo muy bien.

tiendo a hacerlo anteponiendo un átomo a mi lista en la cáscara.

por ejemplo:

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

también podría ser [a, 65,66,67], por supuesto. pero [a | fun_that_returns_a_list ()] imprimirá "lo correcto (más o menos) la mayoría del tiempo"

A partir de Erlang / OTP R16b , puede utilizar la función shell:strings/1 para convertir esta encendido o apagado. Tenga en cuenta que también afecta a la impresión de las cosas que realmente están destinados a ser cadenas, como "foo" en el siguiente ejemplo:

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, no hay manera de desactivarlo. La mejor alternativa es que encuentro a imprimir ya sea explícitamente el valor de la consulta (con io:format) o después del hecho de hacer: io:format("~w\n", [v(-1)])

.

No creo que se puede prevenir. Prepending un átomo parece una chapuza -. Que altera su cadena original

Me suelen utilizar listas: aplanar (String) para forzar a una cadena - especialmente el returnvalue de io_lib: format () no imprime siempre como una cadena. El uso de listas: aplanar () en él lo convierte en uno

.

utilizo el siguiente "estilo C":

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

El problema es que la cadena no es un tipo de Erlang. Una cadena es sólo una lista de números enteros, por lo que no hay forma de que la cáscara para distinguir una cadena imprimible de una lista genérica. No sé si esta respuesta a su pregunta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top