scala libraryDependencies += "com.github.scopt" %% "scopt" % "4.0.0" scala case class Config(inputFile: String = "", outputFile: String = "", verbose: Boolean = false) scala val parser = new scopt.OptionParser[Config]("myapp") { head("myapp", "1.0") opt[String]('i', "inputFile").required().valueName("<file>").action((x, c) => c.copy(inputFile = x)) .text("input file is required") opt[String]('o', "outputFile").required().valueName("<file>").action((x, c) => c.copy(outputFile = x)) .text("output file is required") opt[Unit]('v', "verbose").action((_, c) => c.copy(verbose = true)) .text("enable verbose output") } scala parser.parse(args, Config()) match { case Some(config) => case None => } scala def parseCommandLine(args: Array[String]): Option[Config] = { parser.parse(args, Config()) } scala def validateConfig(config: Config): Either[String, Config] = { if (config.inputFile.isEmpty) { Left("Input file is required.") } else if (!new File(config.inputFile).exists()) { Left("Input file does not exist.") } else { Right(config) } } parser.parse(args, Config()) match { case Some(config) => validateConfig(config) match { case Left(error) => println(s"Error: $error") case Right(validatedConfig) => } case None => } scala val parser = new scopt.OptionParser[Config]("myapp") { head("myapp", "1.0") opt[String]('i', "inputFile").required().valueName("<file>") .action((x, c) => c.copy(inputFile = x)) .text("input file is required") opt[String]('o', "outputFile").required().valueName("<file>") .action((x, c) => c.copy(outputFile = x)) .text("output file is required") opt[Unit]('v', "verbose").action((_, c) => c.copy(verbose = true)) .text("enable verbose output") mutuallyExclusive(opt[String]("mode").action((x, c) => c.copy(mode = x)), opt[Unit]("mode-a").action((_, c) => c.copy(mode = "a")).text("mode a"), opt[Unit]("mode-b").action((_, c) => c.copy(mode = "b")).text("mode b")) }


上一篇:
下一篇:
切换中文