Scala でコマンドライン引数を解析するにはどうすればよいですか? [closed] 質問する

Scala でコマンドライン引数を解析するにはどうすればよいですか? [closed] 質問する

Scala でコマンドライン引数を解析する良い方法は何ですか?

関連している:

ベストアンサー1

ほとんどの場合、外部パーサーは必要ありません。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)

このバージョンでは、1 つの infile のみを使用します。簡単に改善できます (リストを使用)。

また、この方法では、複数のコマンドライン引数 (2 つ以上) を連結できることにも注意してください。

おすすめ記事