如何在Scala上进行模式匹配Scopt可选参数

时间:2017-06-23 01:01:04

标签: scala optionparser scopt

我有一个简单的Scops解析器,看起来像

val parser: scopt.OptionParser[Config] = new scopt.OptionParser[Config]("my-app") {
  head("scopt", "3.x")
  (...)

  opt[String]('q', "query")
    .text("The query.")
    .action { (value, conf) => conf.copy(
      query = value
    )}
    .optional
}
(...)
parser.parse(args, Config()) match {
  case Some(config) => drive(config)
(...)

在我的驱动程序函数中,我希望使用用户通过参数提供的参数初始化参数或其他默认值。

我可以做类似

的事情
var myQuery = _
if config.query != "" myQuery = config.query
else myQuery = config.query

但是,(i)我怀疑对空字符串进行测试是检查用户是否提供了可选参数的正确方法,以及(ii)在编写此字符时看起来非常实用阶。

问题:有一个很好的功能方法吗?我认为模式匹配如下所示,但Scopt参数似乎不作为Option [String]

返回
val myQuery: String = config.query match {
  case Some(q) => q
  case None => "This is the default query"
}

1 个答案:

答案 0 :(得分:1)

只需将Option[String]设为None(默认为query = value),然后将query = Some(value)行更改为import fileinput with fileinput.FileInput(inputFile, inplace=True, backup='.back') as f: for line in f: print(line.replace(textToSearch, textToReplace), end='')