如何在匹配情况下获取默认值?
//Just an example, this value is usually not known
val something: String = "value"
something match {
case "val" => "default"
case _ => smth(_) //need to reference the value here - doesn't work
}
Run Code Online (Sandbox Code Playgroud)
更新:我看到我的问题并没有被真正理解,这就是为什么我展示了一个更接近我正在研究的真实事物的例子:
val db = current.configuration.getList("instance").get.unwrapped()
.map(f => f.asInstanceOf[java.util.HashMap[String, String]].toMap)
.find(el => el("url").contains(referer))
.getOrElse(Map("config" -> ""))
.get("config").get match {
case "" => current.configuration.getString("database").getOrElse("defaultDatabase")
case _ => doSomethingWithDefault(_)
}
Run Code Online (Sandbox Code Playgroud)
om-*_*nom 50
something match {
case "val" => "default"
case default => smth(default)
}
Run Code Online (Sandbox Code Playgroud)
它不是关键字,只是别名,所以这也可以:
something match {
case "val" => "default"
case everythingElse => smth(everythingElse)
}
Run Code Online (Sandbox Code Playgroud)
Joy*_*age 15
Scala中的"_"是一种爱恨交织的语法,它可能非常有用且令人困惑.
在你的例子中:
something match {
case "val" => "default"
case _ => smth(_) //need to reference the value here - doesn't work
}
Run Code Online (Sandbox Code Playgroud)
_表示,我不关心值,以及类型,这意味着你不能再引用标识符了.因此,smth(_)没有适当的参考.
解决方案是您可以为标识符指定名称,如:
something match {
case "val" => "default"
case x => smth(x)
}
Run Code Online (Sandbox Code Playgroud)
我相信这是一个有效的语法,x将匹配任何值,但不匹配"val".
更多说.我认为你对map,flatmap中下划线的使用感到困惑.
val mylist = List(1, 2, 3)
mylist map { println(_) }
Run Code Online (Sandbox Code Playgroud)
这里的下划线引用了集合中的可迭代项.当然,这个下划线甚至可以被视为:
mylist map { println }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41565 次 |
| 最近记录: |