如何使用Scala运行简单的脚本?

vshtjzan  于 5个月前  发布在  Scala
关注(0)|答案(1)|浏览(60)

我已经安装了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脚本的最佳方法是什么?

pbpqsu0x

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 def main = println("Hello, World")

字符串
注意,方法的名称可以是任何东西,所以如果你想让它更短:

@main def _ = println("Hello, World")


Main方法有一些很酷的功能,例如,你可以免费获得命令行参数解析,只需定义参数:

@main def add(a: Int, b: Int) = println(a + b)
scala add 3 4
# 7

scala add 3 four
# Illegal command line: java.lang.NumberFormatException: For input string: "four"

的字符串
Scala将获取参数的名称和类型,并为您生成命令行参数解析代码,包括错误处理和报告。

相关问题