scala - 如何解析 Scala 中的命令行参数?

标签 scala command-line command-line-arguments

在 Scala 中解析命令行参数的好方法是什么?

相关:

最佳答案

在大多数情况下,您不需要外部解析器。 Scala 的模式匹配允许以函数式风格使用参数。例如:

object MmlAlnApp {
  val usage = """
    Usage: mmlaln [--min-size num] [--max-size num] filename
  """
  def main(args: Array[String]) {
    if (args.length == 0) println(usage)
    val arglist = args.toList
    type OptionMap = Map[Symbol, Any]

    def nextOption(map : OptionMap, list: List[String]) : OptionMap = {
      def isSwitch(s : String) = (s(0) == '-')
      list match {
        case Nil => map
        case "--max-size" :: value :: tail =>
                               nextOption(map ++ Map('maxsize -> value.toInt), tail)
        case "--min-size" :: value :: tail =>
                               nextOption(map ++ Map('minsize -> value.toInt), tail)
        case string :: opt2 :: tail if isSwitch(opt2) => 
                               nextOption(map ++ Map('infile -> string), list.tail)
        case string :: Nil =>  nextOption(map ++ Map('infile -> string), list.tail)
        case option :: tail => println("Unknown option "+option) 
                               exit(1) 
      }
    }
    val options = nextOption(Map(),arglist)
    println(options)
  }
}

将打印,例如:

Map('infile -> test/data/paml-aln1.phy, 'maxsize -> 4, 'minsize -> 2)

此版本仅需要一个内文件。易于改进(通过使用列表)。

另请注意,此方法允许连接多个命令行参数 - 甚至超过两个!

关于scala - 如何解析 Scala 中的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2315912/

相关文章:

java - 将 scala.Future 与 Java 8 lambda 一起使用

python - 如何在python中获取没有名称的参数

makefile - 检测未使用的 makefile 命令行参数

ascii - 如何在可执行文件的参数中包含回车符?

java - 连接到远程 Spark master - Java/Scala

scala - Scala创建列表[Int]

Java Debugger 运行应用程序而不会中断

python - 如何从 Python 程序中的命令行获取数据?

java - Kafka Avro 序列化程序 : org. apache.avro.AvroRuntimeException:未打开

command-line - 使用命令行开关启动 Chromium 无效