Programación escalaldice:
Invocar scripts con Scala es tedioso cuando se utilizan estos scripts con frecuencia. En sistemas Windows y Unix, puede crear scripts de Scala independientes que no requieren que utilice la invocación de nombre de archivo de script de Scala. Para sistemas tipo Unix, el siguiente ejemplo demuestra cómo crear un script ejecutable. Recuerda que tienes que hacer que los permisos sean ejecutables, por ejemplo, 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
Así es como puedes usarlo:
$ secho Hello World You entered: Hello World
Me preguntaba qué significa
# src/main/scala/progscala2/toolslibs/secho
exec scala "$0" "$@"
!#
en sh
?
¿Puedo hacer un script Scala independiente como
#!/path/to/scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
en linux?
¡Gracias!
Respuesta1
En sh
,
# src/main/scala/progscala2/toolslibs/secho
es un comentario, ignorado;
exec scala "$0" "$@"
hace que el proceso actual se reemplace a sí mismo con scala
y todos los parámetros del shell como argumentos;
!#
no tiene ningún efecto porque el shell ha dejado de leer el script en este punto.
Sin embargo, Scala maneja archivos de script ignorando un "encabezado" al comienzo del archivo; ese encabezado comienza en una línea que comienza con #!
(o ::#!
en Windows) y termina con una líneacoincidente con !#
( ::!#
) o/env
. El encabezado puede ser una sola línea, por lo que ambos
#!/path/to/scala
!#
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
y
#!/usr/bin/env scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
trabajo (este último requiere scala
estar en el PATH
). Este último corresponde ala documentación.
( !#
es el simétrico de #!
y se usa en Scala para cerrar el "encabezado" abierto por #!
, de una manera similar a /*
y */
para los comentarios en C.)