如何在不执行脚本和生成任何类文件的情况下语法检查Scala脚本?

mid*_*azz 11 scripting scala

可以在Scala中编写脚本.所以你可以把它放到Hello.scala中

#!/bin/sh
exec scala $0 $@
!#

println("You supplied " + args.length + " arguments!")
Run Code Online (Sandbox Code Playgroud)

并使其在Unix中可执行

chmod u+x Hello.scala
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地运行脚本

./Hello.scala
Run Code Online (Sandbox Code Playgroud)

如果没有语法错误,这将编译脚本并运行它.但是,当我只想在执行脚本的情况下进行语法检查时,这并不能解释这种情况.我不想修改脚本(即删除#!指令),我不希望生成任何*.class文件.

如何检查Scala脚本?

Mil*_*bin 24

我希望你真的想要的不只是检查正确的语法...大概你想要知道的是,如果你真的编译它,你的文件将正确编译.这涉及类型检查以及语法检查.

对于Scala源文件(即非脚本),您可以指定-Ystop:refchecks命令行参数,以使编译器在开始代码生成之前停止(如果您真的只对语法正确性感兴趣,可以指定-Ystop:parser) .如果有错误,它们将在控制台上显示,就像完全编译源代码一样.

对于Scala脚本,您还可以指定-Ystop:refchecks参数.如果这样做,那么您将看到控制台上报告的编译错误,或者如果脚本中没有错误,您将看到以下内容,

$ scala -Ystop:refchecks Hello.scala 
java.lang.ClassNotFoundException: Main
Run Code Online (Sandbox Code Playgroud)

ClassNotFoundException,指示尚未生成任何类文件,并且您的脚本尚未执行.

  • 使用2.9中的scalac尝试选项-Ystop-after:refchecks而不是-Ystop:refchecks (2认同)