Art*_*ero 0 groovy scala jvm-languages scalac scala-script
Groovy带有一个名为的编译器groovyc.对于每个脚本,groovyc生成一个扩展的类groovy.lang.Script,其中包含一个main方法,以便Java可以执行它.已编译类的名称与正在编译的脚本的名称相匹配.
例如,使用此HelloWorld.groovy脚本:
println "Hello World"
Run Code Online (Sandbox Code Playgroud)
这就像这段代码:
class HelloWorld extends Script {
public static void main(String[] args) {
println "Hello World"
}
}
Run Code Online (Sandbox Code Playgroud)
Scala带有一个名为的编译器scalac.
例如,使用相同的HelloWorld.scala脚本:
println("Hello World")
Run Code Online (Sandbox Code Playgroud)
代码无效scalac,因为编译器期望类或对象定义,但在Scala REPL Interpreter中工作.怎么可能?在执行之前它是否包含在类中?
Scala-Script中的代码首先放在Scala对象中,然后编译为JVM-Bytecode,最后执行.您可以通过编写scala -Xprint:parser my_file.scala以下内容来查看生成的Scala对象:
package <empty> {
object Main extends scala.ScalaObject {
def <init>() = {
super.<init>();
()
};
def main(argv: Array[String]): scala.Unit = {
val args = argv;
{
final class $anon extends scala.AnyRef {
def <init>() = {
super.<init>();
()
};
println("hello world")
};
new $anon()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)