Domanda

Non capisco davvero come funzionano gli argomenti della riga di comando con gliscript.Dalla manpage, capisco che gli argomenti sono passati come un elenco di stringhe per principale / 1.Come posso analizzare gli argomenti passati a Main?

Considera quanto segue:

#!/usr/bin/env escript
usage() ->
  io:format("Usage: ~s <port#>~n",[escript:script_name()]),
  halt(1).

main([]) ->
  usage();
main(Args)->
  io:format("Starting test server on port #~s~n",[Args]).
.

Un test semplice e tutto sembra buono con un solo argomento.

  ./test_server.erl 17001
   Starting test server on port #17001
.

E se passerò in più argomenti?

  ./test_server.erl 17001 8 9 abc
   Starting test server on port #1700189abc
.

Non è quello che volevo.Ho provato a girare la stringa sul carattere spaziale:

  ....
  ArgsList = string:tokens(Args, " "),
  io:format("Length: ~w~n",[length(ArgsList)]),
  ....
.

rendimenti Lunghezza: 1

È stato utile?

Soluzione

Lunghezza (L)

length/1 è una funzione incorporata che puoiUtilizzare come è:

io:format("Length: ~p~n", [length(Args)])
.

args

Args è un elenco di stringhe.Questa chiamata (utilizzando ~p come formato):

io:format("Starting test server on port #~p~n", [Args]).
.

produrrebbe il risultato:

./test_server.erl 17001 8 9 abc
Starting test server on port #["17001","8","9","abc"]
.

Se si utilizza ~s, Erlang lo interpreta come una stringa (o elenco IO, davvero) e che viene stampato con tutto l'elemento concatenato.

Per stampare tutti gli argomenti uno per uno, prova questo invece della chiamata io:format/2:

[io:format("~s~n", [A]) || A <- Args].
.

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