我已经安装了Scala(在一台有空气间隙的Linux机器上,从scala3-3.3.1.tar.gz)。
我试着运行一个没有sbt
的简单Scala程序。
object Hello {
def main(args: Array[String]) = {
println("Hello, World")
}
}
字符串
然后调用
scala hello.scala
型
这是可行的:-)
但是我浏览了Scala 3的网站,看到了很多没有完整的“对象 Package ”的代码示例,所以我希望编写一个更简单的文件script.scala
。
println("Hello, World")
型
然后用scala
运行它。但是这不起作用:Scala返回错误“Illegal start of toplevel definition”。
我如何运行这个?我需要一些命令行选项吗?或者我需要scala-cli
?(我已经阅读了scala
已经成为或将成为scala-cli
。)
我很困惑,在一台有气隙的机器上运行简单Scala脚本的最佳方法是什么?
1条答案
按热度按时间pbpqsu0x1#
Scala 3 does not support script mode。有一个关于adding back some of the features of the old Scala 2
scala
runner的未决Scala Improvement Process (SIP)问题。实现的方式是合并Scala CLI中的一些代码,其中包括一个脚本运行器(以及许多其他东西)。
好消息是:您不必等待SIP-42的实现,因为Scala CLI已经存在并且 * 现在 * 就可以工作。Scala CLI脚本具有许多旧脚本运行器没有的功能,例如加载额外的代码或通过
//> using
指令指定特定的Scala版本。请注意,如果我没有弄错的话,你展示的代码 * 从来不是 * 法律的 Scala 代码。它是Scala的一个特殊的 * 子变体 *,它 * 只 * 被集成到
scala
命令中的脚本运行器接受。这看起来像是一个技术问题,但这就是为什么Scala语言中没有将其记录为不兼容的原因:它从来不是Scala语言的一部分。如果你不想使用Scala 2或Scala CLI,Scala 3 has massively improved the syntax for writing main methods,那么这个例子就不像你问题中的例子那么冗长。在Scala 3中,你的代码看起来像这样:
字符串
注意,方法的名称可以是任何东西,所以如果你想让它更短:
型
Main方法有一些很酷的功能,例如,你可以免费获得命令行参数解析,只需定义参数:
的字符串
Scala将获取参数的名称和类型,并为您生成命令行参数解析代码,包括错误处理和报告。