gpt4 book ai didi

scala - 当运行“.scala”程序时,Scala运行时/REPL背后到底发生了什么?

转载 作者:行者123 更新时间:2023-12-03 13:30:08 29 4
gpt4 key购买 nike

当我从命令行运行类似以下内容的代码时,真正发生了什么?

> scala hello.scala


是否有hello.class生成,执行然后丢弃?还是在这种情况下Scala表现得像翻译一样?我只是在想,当然,我不能对Java做同样的事情:

> java hello.java

最佳答案

是的,生成了一个hello.class。编译器会将您的代码包装在Main对象中,对其进行编译,然后执行Main.main,给定的hello.scala为

println(args.mkString)
println(argv.mkString)


如果使用 -Xprint:parser选项: scala -Xprint:parser hello.scala foo bar运行,则会看到如何重写代码:

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(args.mkString);
println(argv.mkString)
};
new $anon()
}
}
}
}


然后将这些代码编译(我相信是内存文件系统,但不确定),然后执行。查看 ScriptRunner,我看到在默认的temp文件夹下创建了一个临时目录。例如,查看我的系统,我看到了一堆 %TEMP%/scalascript*文件夹。

请注意,即使在解释器中,也不会解释代码。有关更多信息,请参见 Scala: Is there a default class if no class is defined?(它实际上已被重写,编译和评估)。

关于scala - 当运行“.scala”程序时,Scala运行时/REPL背后到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655165/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com