Как сопоставить шаблон на необязательных аргументах Scala 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) это не выглядит очень функциональным для написания этого в Scala.
Вопрос: Есть ли хороший функциональный способ сделать это? Я рассмотрел сопоставление с образцом, как показано ниже, но аргументы Scopt, похоже, не возвращаются как Option[String]
val myQuery: String = config.query match {
case Some(q) => q
case None => "This is the default query"
}
1 ответ
Просто сделай Config#query
Option[String]
(с None
по умолчанию) и измените query = value
линия к query = Some(value)
,