在 Scala 3 中将命令行参数解析为 Array[String]?

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

好吧,我一直在尝试从教科书中学习 Scala,但它是在 Scala 3 发布之前编写的,所以很多示例代码无法编译。

这本书是如何介绍命令行参数的:

println(args(0).toDouble+args(1).toDouble)

以及我将其转换为 Scala 3 兼容的最佳尝试:

@main def main(args: Array[String]) = {  
  println(args(0).toDouble+args(1).toDouble)
}

这是编译器告诉我的:

[error] ./add.scala:1:1
[error] No given instance of type scala.util.CommandLineParser.FromString[Array[String]] was found for parameter fs of method parseArgument in object CommandLineParser
[error] @main def main(args: Array[String]) = {
[error] ^

我该如何解决这个问题?还有一个类似的问题已经发布了,但答案似乎都是用 Scala 的早期版本编写的。至于官方发布指南,建议使用一些与CLP有关的东西,我不太明白。

scala command-line-arguments
1个回答
0
投票

如果您仅使用 Scala 3,则可以使用

@main
注释,但参数应定义为常规方法参数:

// Instead of:
@main def main(args: Array[String])

// Do:
@main def main(arg0: Double, arg1: Double)

需要注意的一件事是,参数可以输入,它们不再必须是

String
。转换会自动为您处理*。

你可以这样写:

@main def main(arg0: Double, arg1: Double) = { 
  println(arg0 + arg1) 
}  

*:默认情况下仅支持简单类型,但可以通过提供 TODO 实例来扩展。


如果您要交叉编译到 Scala 2 或者只是您更喜欢 Scala 2 方式,更接近 Java 的方式,请删除

@main
注释,并确保将该方法包含在
object
中。

object MyProgram {
  def main(args: Array[String]) = ???
}

文档:https://docs.scala-lang.org/scala3/book/methods-main-methods.html

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.