除了严重的性能问题,Scala 是一种非常强大的语言。因此,我现在经常将它用于 Bash 中的脚本任务。有没有办法像我对 Python 文件一样执行 *.scala 文件?据我所知,Python 使用字节码来执行程序,就像 JVM 一样。但是,我不需要调用任何称为 pythonc(如 scalac 或 javac)的东西来完成此操作。因此,我希望 Scala 能够以类似的方式行事。
问问题
3512 次
2 回答
17
scala 手册页提供了一些示例,说明如何在Windows 和非 Windows 平台上运行 Scala 代码片段,就好像它们是脚本一样(下面是从手册页复制的示例):
Unix
#!/bin/sh
exec scala "$0" "$@"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
视窗
::#!
@echo off
call scala %0 %*
goto :eof
::!#
Console.println("Hello, world!")
argv.toList foreach Console.println
为了加快后续运行,您可以使用以下-savecompiled
选项缓存已编译的片段:
#!/bin/sh
exec scala -savecompiled "$0" "$@"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
更新:从 Scala 2.11 开始(如this similar answer中所述),您现在可以在 Unix 上执行此操作:
#!/usr/bin/env scala
println("Hello, world!")
println(args.mkString(" "))
于 2013-09-22T11:58:28.820 回答
2
我不使用 python,但在 Scala 中,我能做的最有脚本的事情是:
thinkpux:~/proj/mini/forum > echo 'println(" 3 + 4 = " + (3 + 4))' | scala
Welcome to Scala version 2.10.2 (Java HotSpot(TM) Server VM, Java 1.7.0_09).
Type in expressions to have them evaluated.
Type :help for more information.
scala> println(" 3 + 4 = " + (3 + 4))
3 + 4 = 7
scala> thinkpux:~/proj/mini/forum >
但是,之后,我在 bash 中没有视觉反馈,所以我必须调用“清除”。
但是编写脚本并执行它没有问题:
thinkpux:~/proj/mini/forum > echo 'println(" 3 + 4 = " + (3 + 4))' > print7.scala
thinkpux:~/proj/mini/forum > scala print7.scala
3 + 4 = 7
然后,外壳没有问题。
使用封闭类,代码不会被执行:
thinkpux:~/proj/mini/forum > echo -e 'class Foo {\nprintln(" 3 + 4 = " + (3 + 4))\n}\n'
class Foo {
println(" 3 + 4 = " + (3 + 4))
}
thinkpux:~/proj/mini/forum > scala Foo.scala
thinkpux:~/proj/mini/forum > cat Foo.scala
class Foo {
println(" 3 + 4 = " + (3 + 4))
}
但是通过实例化一个类,您可以在其中执行代码,而无需使用众所周知的(希望如此)“主要”方式:
thinkpux:~/proj/mini/forum > echo -e 'class Foo {\nprintln(" 3 + 4 = " + (3 + 4))\n}\nval foo = new Foo()' > Foo.scala
thinkpux:~/proj/mini/forum > cat Foo.scala
class Foo {
println(" 3 + 4 = " + (3 + 4))
}
val foo = new Foo()
thinkpux:~/proj/mini/forum > scala Foo.scala
3 + 4 = 7
于 2013-07-19T23:14:37.570 回答