如何运行Scala 3脚本?

xyhw6mcr  于 2022-12-04  发布在  Scala
关注(0)|答案(1)|浏览(216)

如何在解释模式下运行*.scala脚本?例如,我有simple.scala

// simple.scala
println("a simple program")

如果用scala simple.scala,我得到

error: Compile server encountered fatal condition: javax/tools/DiagnosticListener
java.lang.ClassNotFoundException: javax.tools.DiagnosticListener
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:433)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:586)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
        at scala.tools.util.PathResolverBase$Calculated$.javaBootClasspath(PathResolver.scala:277)
        at scala.tools.util.PathResolverBase$Calculated$.basis(PathResolver.scala:283)
        at scala.tools.util.PathResolverBase$Calculated$.containers$lzycompute(PathResolver.scala:293)
        at scala.tools.util.PathResolverBase$Calculated$.containers(PathResolver.scala:293)
        at scala.tools.util.PathResolverBase.containers(PathResolver.scala:309)
        at scala.tools.util.PathResolver.computeResult(PathResolver.scala:341)
        at scala.tools.util.PathResolver.computeResult(PathResolver.scala:332)
        at scala.tools.util.PathResolverBase.result(PathResolver.scala:314)
        at scala.tools.nsc.backend.JavaPlatform$class.classPath(JavaPlatform.scala:28)
        at scala.tools.nsc.Global$GlobalPlatform.classPath(Global.scala:115)
        at scala.tools.nsc.Global.scala$tools$nsc$Global$$recursiveClassPath(Global.scala:131)
        at scala.tools.nsc.Global$GlobalMirror.rootLoader(Global.scala:64)
        at scala.reflect.internal.Mirrors$Roots$RootClass.<init>(Mirrors.scala:307)
        at scala.reflect.internal.Mirrors$Roots.RootClass$lzycompute(Mirrors.scala:321)
        at scala.reflect.internal.Mirrors$Roots.RootClass(Mirrors.scala:321)
        at scala.reflect.internal.Mirrors$Roots$EmptyPackageClass.<init>(Mirrors.scala:330)
        at scala.reflect.internal.Mirrors$Roots.EmptyPackageClass$lzycompute(Mirrors.scala:336)
        at scala.reflect.internal.Mirrors$Roots.EmptyPackageClass(Mirrors.scala:336)
        at scala.reflect.internal.Mirrors$Roots.EmptyPackageClass(Mirrors.scala:276)
        at scala.reflect.internal.Mirrors$RootsBase.init(Mirrors.scala:250)
        at scala.tools.nsc.Global.rootMirror$lzycompute(Global.scala:73)
        at scala.tools.nsc.Global.rootMirror(Global.scala:71)
        at scala.tools.nsc.Global.rootMirror(Global.scala:39)
        at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass$lzycompute(Definitions.scala:257)
        at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass(Definitions.scala:257)
        at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1390)
        at scala.tools.nsc.Global$Run.<init>(Global.scala:1242)
        at scala.tools.nsc.StandardCompileServer.session(CompileServer.scala:151)
        at scala.tools.util.SocketServer$$anonfun$doSession$1$$anonfun$apply$1.apply(SocketServer.scala:74)
        at scala.tools.util.SocketServer$$anonfun$doSession$1$$anonfun$apply$1.apply(SocketServer.scala:74)
        at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
        at scala.Console$.withOut(Console.scala:65)
        at scala.tools.util.SocketServer$$anonfun$doSession$1.apply(SocketServer.scala:74)
        at scala.tools.util.SocketServer$$anonfun$doSession$1.apply(SocketServer.scala:69)
        at scala.tools.nsc.io.Socket.applyReaderAndWriter(Socket.scala:49)
        at scala.tools.util.SocketServer.doSession(SocketServer.scala:69)
        at scala.tools.util.SocketServer.loop$1(SocketServer.scala:85)
        at scala.tools.util.SocketServer.run(SocketServer.scala:97)
        at scala.tools.nsc.CompileServer$$anonfun$execute$2$$anonfun$apply$mcZ$sp$1.apply$mcZ$sp(CompileServer.scala:218)
        at scala.tools.nsc.CompileServer$$anonfun$execute$2$$anonfun$apply$mcZ$sp$1.apply(CompileServer.scala:213)
        at scala.tools.nsc.CompileServer$$anonfun$execute$2$$anonfun$apply$mcZ$sp$1.apply(CompileServer.scala:213)
        at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
        at scala.Console$.withOut(Console.scala:53)
        at scala.tools.nsc.CompileServer$$anonfun$execute$2.apply$mcZ$sp(CompileServer.scala:213)
        at scala.tools.nsc.CompileServer$$anonfun$execute$2.apply(CompileServer.scala:213)
        at scala.tools.nsc.CompileServer$$anonfun$execute$2.apply(CompileServer.scala:213)
        at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
        at scala.Console$.withErr(Console.scala:80)

但是我可以通过命令scala> println("a simple program")来打开解释器。它工作正常。而且,如果我用scalac编译一个更完整的.scala(包含一个包含主函数的对象),然后用scala运行它,事情会很顺利。
我想知道我是否可以在解释器中运行一个.scala脚本。有什么问题吗?
更新:在我将scala从2.11更新到3.20之后,没有javax.tools.DiagnosticListener异常。但是当我运行scala -explain simple.scala时,错误是:

-- [E103] Syntax Error: ~/simple.scala:2:0
2 |println("a simple program")
  |^^^^^^^
  |Illegal start of toplevel definition
  |-----------------------------------------------------------------------------
  | Explanation (enabled by `-explain`)
  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  | A statement is an import or export, a definition or an expression.
  | Some statements are only allowed in certain contexts
   -----------------------------------------------------------------------------
1 error found
Error: Errors encountered during compilation

JAVA版本:开放日16.0.1 2021年4月20日

9vw9lbht

9vw9lbht1#

正如Seth Tisue所提到的,以下作品:

def main(args: Array[String]): Unit =
    // simple.scala
    println("a simple program")

如果按如下方式调用它:
scala3 ~/simple.scala

相关问题