scala:将match语句转换为模式匹配匿名函数-带值

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

类似的问题:。同样,IntelliJ要求我改进代码。不同之处在于,我使用值进行匹配:

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)}