【发布时间】:2012-03-19 17:17:07
【问题描述】:
时髦
Groovy 带有一个名为groovyc 的编译器。对于每个脚本,groovyc 生成一个扩展 groovy.lang.Script 的类,其中包含一个 main 方法,以便 Java 可以执行它。编译后的类名与正在编译的脚本名相匹配。
例如,使用这个HelloWorld.groovy 脚本:
println "Hello World"
变成这样的代码:
class HelloWorld extends Script {
public static void main(String[] args) {
println "Hello World"
}
}
斯卡拉
Scala 带有一个名为 scalac 的编译器。
例如,使用相同的HelloWorld.scala 脚本:
println("Hello World")
代码对scalac 无效,因为编译器需要类或对象定义,但在 Scala REPL 解释器中有效。怎么可能?执行前是否封装在一个类中?
【问题讨论】:
-
您是在问
scalac生成了哪些Java 代码?您确定scalac实际生成Java 代码吗?我假设它直接生成 Java 字节码(即.class文件)。 -
println("Hello World")不是有效的 scala 类,因此 scalac 将拒绝编译它(尽管 scala REPL 会“解释”它) -
我认为这里存在一个普遍的理解问题。 Scala 不是脚本语言,所以没有 Scala 脚本。 Scala 是一种静态类型的编程语言,可以编译为 jvm 字节码。
-
@drexin 请参阅 Odersky 等人的 Scala 编程 的第 2 章第 4 节,“编写一些 Scala 脚本”...我想他们会不同意 :)不过,您不要使用
scalac。 -
@LuigiPlinge 好吧,你是对的 ;-)。
标签: scala groovy jvm-languages scalac scala-script