Да, генерируется класс 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%/scalascript*
.
Обратите внимание, что даже в интерпретаторе код не интерпретируется. См. Scala: существует ли класс по умолчанию, если класс не определен? для получения дополнительной информации (он действительно переписывается, компилируется и оценивается).