2

我想使用 Scala3 执行以下脚本:

@main def m() =
  println("Hello, world! I'm a script")

当我键入命令时scala hello.scala,我收到以下错误:

/Users/avirals/dev/learning-scala/hello-world/hello.scala:1: error: not found: type main
@main def m() =
 ^
one error found

我认为这是因为我安装了两个版本的 Scala(2 和 3)。我知道如何为两者启动 REPL(如此所述),但我无法从命令行执行 Scala3 脚本。

[更新]

我试过scala3-repl hello.scala了,它只是打开了 REPL:

➜  learning-scala git:(main) scala3-repl hello.scala
scala> m()
1 |m()
  |^
  |Not found: m

鉴于我安装了两个不同版本(2 和 3)的 Scala,如何从命令行执行 Scala 3 脚本?

我的操作系统:MacOS

更新 2

正如这个答案中所建议的,我尝试使用它运行amm并且它适用于一些脚本。但是,以下脚本失败:

脚本:

@main def m(args: String*) =
  var i = 0
  while i < args.length do
    println(args(i))
    i += 1

错误:

➜  learning-scala git:(main) amm printargs.scala
printargs.scala:2:3 expected (If | While | Try | DoWhile | For | Throw | Return | ImplicitLambda | SmallerExprOrLambda)
  var i = 0
  ^

在 Scala3-REPL 中运行上述脚本有效:

➜  learning-scala git:(main) scala3-repl
scala> @main def m(args: String*) =
     |   var i = 0
     |   while i < args.length do
     |     println(args(i))
     |     i += 1
     |
def m(args: String*): Unit

scala> m("aviral", "srivastava")
aviral
srivastava

在仅安装了 Scala3 的系统 (MacOS) 中运行相同的脚本也可以正常工作。

4

1 回答 1

3

当前存在最小脚本支持#11379。我可以通过从https://github.com/lampepfl/dotty/releases/download/3.0.0-RC3/scala3-3.0.0-RC3.zip手动下载版本、解压缩并提供可执行文件来使其工作发射器许可

./scala3-3.0.0-RC3/bin/scala hello.scala
Hello, world! I'm a script

使用scala3-repl启动器,您至少可以做到

$ scala3-repl
scala> :load hello.scala                                                                                                                                                                                      
def m(): Unit

scala> m()                                                                                                                                                                                                  
Hello, world! I'm a script
于 2021-05-05T22:58:38.060 回答