Programação Scaladiz:
Invocar scripts com scala é entediante quando você usa esses scripts com frequência. Em sistemas Windows e do tipo Unix, você pode criar scripts Scala independentes que não exigem o uso da invocação de nome de arquivo de script scala. Para sistemas do tipo Unix, o exemplo a seguir demonstra como criar um script executável. Lembre-se de que você precisa tornar as permissões executáveis, por exemplo, chmod +x secho:
#!/bin/sh # src/main/scala/progscala2/toolslibs/secho exec scala "$0" "$@" !# print("You entered: ") args.toList foreach { s => printf("%s ", s) } println
Aqui está como você pode usá-lo:
$ secho Hello World You entered: Hello World
Fiquei me perguntando o que significa
# src/main/scala/progscala2/toolslibs/secho
exec scala "$0" "$@"
!#
em sh
?
Posso criar um script Scala independente como
#!/path/to/scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
no Linux?
Obrigado!
Responder1
Em sh
,
# src/main/scala/progscala2/toolslibs/secho
é um comentário ignorado;
exec scala "$0" "$@"
faz com que o processo atual seja substituído por scala
e todos os parâmetros do shell como argumentos;
!#
não tem efeito porque o shell parou de ler o script neste ponto.
No entanto, Scala lida com arquivos de script ignorando um “cabeçalho” no início do arquivo; esse cabeçalho começa em uma linha que começa com #!
(ou ::#!
no Windows) e termina com uma linhacorrespondendo a !#
( ::!#
) ou/env
. O cabeçalho pode ser uma única linha, então ambos
#!/path/to/scala
!#
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
e
#!/usr/bin/env scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
trabalho (este último exige scala
estar no PATH
). Este último corresponde aa documentação.
( !#
é simétrico de #!
e é usado em Scala para fechar o “cabeçalho” aberto por #!
, de maneira semelhante a /*
e */
para comentários em C.)