scala:将match语句转换为模式匹配匿名函数-带值
类似的问题:。同样,IntelliJ要求我改进代码。不同之处在于,我使用值进行匹配:scala:将match语句转换为模式匹配匿名函数-带值,scala,pattern-matching,Scala,Pattern Matching,类似的问题:。同样,IntelliJ要求我改进代码。不同之处在于,我使用值进行匹配: val matchMe = "Foo" keys.foreach(key => key match { case `matchMe` => somethingSpecial() case _ => somethingNormal(key, calcWith(key)) }) 将其重构为匿名模式匹配函数类似于: keys.foreach { case `matchM
val matchMe = "Foo"
keys.foreach(key =>
key match {
case `matchMe` => somethingSpecial()
case _ => somethingNormal(key, calcWith(key))
})
将其重构为匿名模式匹配函数类似于:
keys.foreach {
case `matchMe` => somethingSpecial(_)
case _ => somethingNormal(_, calcWith(_)) //this doesn't work
}
请注意,在第二种情况下,我不能使用
。
,因为我需要它两次。有什么方法可以在这里使用匿名模式匹配函数吗?这里不能使用通配符\uuu
,它的目的是表示您不关心匹配的值
可以使用命名参数:
keys.foreach {
case `matchMe` => somethingSpecial(matchMe)
case nonSpecialKey => somethingNormal(nonSpecialKey, calcWith(nonSpecialKey))
}
不受任何限制,它将匹配任何值。请注意,case
s的顺序很重要,因为case x=>…
匹配任何内容,并且基本上会简化其他case
语句
顺便说一句,我不认为你的
有什么特别的()
能满足你的需要。它只是一个简短版本的x=>somethingSpecial(x)
,而不是somethingSpecial(matchMe)
f()
是x=>f(x)
。而且ks-foreach{case}=>f(}
不是ks-foreach{case x=>f(x)}
。