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

问题描述 投票:0回答:1

我已经安装了 Scala(在一台气隙 Linux 机器上,来自 scala3-3.3.1.tar.gz)。

我尝试在没有

sbt
的情况下运行一个简单的 Scala 程序。所以我写了一个文件
hello.scala

object Hello {
  def main(args: Array[String]) = {
    println("Hello, World")
  }
}

然后调用

scala hello.scala 

这有效。 :-)

但是我浏览了 Scala 3 网站,看到了许多没有整个“对象包装”的代码示例。所以我希望写一个更简单的文件

script.scala

println("Hello, World")

并使用

scala
运行它。但这不起作用:Scala 返回错误“顶级定义的非法开始”。

我该如何运行它?我需要一些命令行选项吗?还是我需要

scala-cli
? (我已读到
scala
已经成为或将成为
scala-cli
。)

我很困惑。在气隙机器上运行简单 Scala 脚本的最佳方法是什么?

scala scripting scala-cli
1个回答
0
投票

Scala 3 不支持脚本模式。有一个开放的 Scala 改进流程 (SIP) 问题,涉及 重新添加旧 Scala 2

scala
运行程序的一些功能。

实现这一点的方法是合并 Scala CLI 中的一些代码,其中包括脚本运行器(以及许多其他东西)。

好消息是:您不必等待 SIP-42 实施,因为 Scala CLI 已经存在并且可以工作了现在。 Scala CLI 脚本具有许多旧脚本运行程序所没有的功能,例如加载附加代码或通过

//> using
指令指定特定的 Scala 版本。

请注意,如果我没有记错的话,您显示的代码是never合法的Scala代码。它是 Scala 的一个特殊的子变体,它被集成到

scala
命令中的脚本运行器接受。这可能看起来像是一个技术问题,但这就是为什么在 Scala 语言中没有将其记录为不兼容的原因:它从来都不是 Scala 语言的一部分。

如果您不想使用 Scala 2 或 Scala CLI,Scala 3 极大地改进了编写主要方法的语法,因此该示例并不像您问题中的示例那么冗长。在 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 将获取参数的名称和类型,并为您生成命令行参数解析代码,包括错误处理和报告。

© www.soinside.com 2019 - 2024. All rights reserved.