Puis-je désactiver l'impression des listes de petits entiers sous forme de chaînes en shell Erlang?

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

  •  23-09-2019
  •  | 
  •  
Était-ce utile?

La solution

Vous pouvez désactiver ce type de comportement avec fonction shell:strings/1 commençant par Erlang R16B.

Rappelez-vous que cette option globale est à tous les coquilles de nœuds, et il pourrait être sage de le remettre après avoir terminé le jeu est coquille dans les noeuds de vie plus longue.

Autres conseils

Je ne sais pas s'il est possible de changer le comportement par défaut de la coquille, mais vous pouvez formater au moins correctement votre sortie, en utilisant io:. Format

Voici un exemple:

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

Et puisque la coquille est seulement pour l'expérimentation / maintenance, io:format() devrait être au moins suffisant pour votre application réelle. Peut-être vous devriez également envisager d'écrire votre propre format / méthode d'impression, par exemple formatPerson() ou quelque chose comme ça, qui formate tout bien.

J'ai tendance à le faire par préfixer un atome à ma liste dans le shell.

par exemple:

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

pourrait également être [a, 65,66,67], bien sûr. mais [a | fun_that_returns_a_list ()] imprimera "la bonne chose (ish) la plupart du temps"

Au Erlang / OTP R16B , vous pouvez utiliser la fonction shell:strings/1 pour activer ou désactiver cette fonction. Notez que cela concerne également l'impression des choses qui sont réellement destinés à être des chaînes, comme "foo" dans l'exemple suivant:

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]}

Non, il n'y a aucun moyen de le désactiver. La meilleure alternative que je trouve est à imprimer soit explicitement la valeur dans la requête (avec io:format) ou après le fait faire: io:format("~w\n", [v(-1)])

.

Je ne pense pas que vous pouvez l'empêcher. Préfixer un atome apparaît comme une bidouille -. Il ne modifie votre chaîne d'origine

J'utilise généralement des listes: aplatir (String) pour forcer à une chaîne - en particulier le returnValue de io_lib: format () n'imprime pas toujours comme une chaîne. listes en utilisant: aplatissent () sur elle en fait un

.

J'utilise les éléments suivants "style C":

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

Le problème est que la chaîne n'est pas un type dans Erlang. Une chaîne est juste une liste d'entiers, donc il n'y a aucun moyen pour le shell de distinguer une chaîne imprimable à partir d'une liste générique. Je ne sais pas si cette réponse à votre question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top