Scala 中的简单函数式 getopt
Simple functional getopt in Scala
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 = {
list match {
case Nil => map
case "-h" | "--help" :: tail => usage(); sys.exit(0)
case "-p" | "--port" :: option :: tail => nextOption(map ++ Map('port -> option.toInt), tail)
}
}
有什么方法可以在List
中捕获更多的head值吗?此代码生成
type mismatch;
found : String("-h")
required: List[String]
case "-h" | "--help" :: tail => usage(); sys.exit(0)
^
可能重复:Best way to parse command-line parameters?
Scala 的模式匹配允许您将匹配存储在变量中,然后对该变量执行条件检查。
list match {
case Nil => map
case x :: tail if x == "-h" || x == "--help" => usage(); sys.exit(0)
case y :: option :: tail if y == "-p" || y == "--port" => nextOption(map ++ Map('port -> option.toInt), tail)
}
只需将代码括在括号中即可:
case ("-h" | "--help") :: tail => usage(); sys.exit(0)
没有括号,编译器将代码解释为
case ("-h") | ("--help" :: tail) => usage(); sys.exit(0)
这不是你想要的。
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 = {
list match {
case Nil => map
case "-h" | "--help" :: tail => usage(); sys.exit(0)
case "-p" | "--port" :: option :: tail => nextOption(map ++ Map('port -> option.toInt), tail)
}
}
有什么方法可以在List
中捕获更多的head值吗?此代码生成
type mismatch;
found : String("-h")
required: List[String]
case "-h" | "--help" :: tail => usage(); sys.exit(0)
^
可能重复:Best way to parse command-line parameters?
Scala 的模式匹配允许您将匹配存储在变量中,然后对该变量执行条件检查。
list match {
case Nil => map
case x :: tail if x == "-h" || x == "--help" => usage(); sys.exit(0)
case y :: option :: tail if y == "-p" || y == "--port" => nextOption(map ++ Map('port -> option.toInt), tail)
}
只需将代码括在括号中即可:
case ("-h" | "--help") :: tail => usage(); sys.exit(0)
没有括号,编译器将代码解释为
case ("-h") | ("--help" :: tail) => usage(); sys.exit(0)
这不是你想要的。