0

我有一个简单的 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)在 Scala 中编写它看起来不太实用。

问题:有没有很好的功能性方法来做到这一点?我考虑了像下面这样的模式匹配,但 Scop 参数似乎没有作为 Option[String] 返回

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

1 回答 1

2

只需制作Config#query一个Option[String]None默认为)并将该query = value行更改为query = Some(value).

于 2017-06-23T07:03:03.713 回答