除了严重的性能问题,Scala是一种非常强大的语言.因此,我现在经常在Bash中使用它来执行脚本任务.有没有办法像我用Python文件那样执行*.scala文件?据我所知,Python使用字节码来执行程序,就像JVM一样.但是,没有任何叫做pythonc(比如scalac或javac)的东西我需要调用才能完成这个任务.因此,我希望Scala能够以类似的方式行事.
met*_*sim 17
在斯卡拉手册页提供了有关如何,好像他们是一个脚本,用于Windows和非Windows平台(以下从手册页复制实例)都运行Scala代码片段一些例子:
Unix的
#!/bin/sh
exec scala "$0" "$@"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
Run Code Online (Sandbox Code Playgroud)
视窗
::#!
@echo off
call scala %0 %*
goto :eof
::!#
Console.println("Hello, world!")
argv.toList foreach Console.println
Run Code Online (Sandbox Code Playgroud)
要加快后续运行,您可以使用以下-savecompiled
选项缓存已编译的片段:
#!/bin/sh
exec scala -savecompiled "$0" "$@"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
Run Code Online (Sandbox Code Playgroud)
更新:从Scala 2.11开始(如此类似答案中所述),您现在可以在Unix上执行此操作:
#!/usr/bin/env scala
println("Hello, world!")
println(args.mkString(" "))
Run Code Online (Sandbox Code Playgroud)
我不使用 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 >
Run Code Online (Sandbox Code Playgroud)
然而,之后,我在 bash 中没有视觉反馈,所以我必须调用“clear”。
但是编写脚本并执行是没有问题的:
thinkpux:~/proj/mini/forum > echo 'println(" 3 + 4 = " + (3 + 4))' > print7.scala
thinkpux:~/proj/mini/forum > scala print7.scala
3 + 4 = 7
Run Code Online (Sandbox Code Playgroud)
那么,shell就不存在问题了。
对于封闭类,代码将不会被执行:
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))
}
Run Code Online (Sandbox Code Playgroud)
但是通过实例化一个类,您可以在其中执行代码,而无需使用众所周知的(希望如此)“主要”方式:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3466 次 |
最近记录: |