如何在 Scala Scopt 可选参数上进行模式匹配
How to pattern match on Scala Scopt optional arguments
我有一个简单的 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"
}
只需将 Config#query
设为 Option[String]
(默认为 None
)并将 query = value
行更改为 query = Some(value)
。
我有一个简单的 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"
}
只需将 Config#query
设为 Option[String]
(默认为 None
)并将 query = value
行更改为 query = Some(value)
。