如何解决当系统同时安装了 Scala2 和 Scala3 时,如何执行 Scala3 脚本?
我想使用 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(如 here 所述),但我无法从命令行执行 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
正如 this 回答中所建议的,我尝试使用 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) 中运行相同的脚本也能正常工作。
解决方法
当前存在Minimal scripting support #11379。我可以通过从 https://github.com/lampepfl/dotty/releases/download/3.0.0-RC3/scala3-3.0.0-RC3.zip 手动下载一个版本、解压缩并授予启动器可执行权限来使其工作
call_id
使用 ./scala3-3.0.0-RC3/bin/scala hello.scala
Hello,world! I'm a script
启动器,您至少可以做到
scala3-repl
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。