scala:将匹配语句转换为模式匹配匿名函数 - 具有值
scala: convert match statement to pattern matching anonymous function - with values
喜欢类似的问题:Convert match statement to partial function when foreach is used。现在类似地,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
}
请注意,在第二种情况下,我无法使用 _
,因为我需要它两次。这里有什么方法可以使用匿名模式匹配函数吗?
您不能在此处使用通配符 _
,其目的是表明您不关心要匹配的值。
您可以使用命名参数:
keys.foreach {
case `matchMe` => somethingSpecial(matchMe)
case nonSpecialKey => somethingNormal(nonSpecialKey, calcWith(nonSpecialKey))
}
没有任何限制,它将匹配任何值。请注意 case
的顺序很重要,因为 case x => ...
匹配任何内容,并且基本上会缩短其他 case
语句。
顺便说一句,我不认为您的 somethingSpecial(_)
能达到您 want/expect 的目的。这只是 x => somethingSpecial(x)
的缩写,而不是 somethingSpecial(matchMe)
。
喜欢类似的问题:Convert match statement to partial function when foreach is used。现在类似地,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
}
请注意,在第二种情况下,我无法使用 _
,因为我需要它两次。这里有什么方法可以使用匿名模式匹配函数吗?
您不能在此处使用通配符 _
,其目的是表明您不关心要匹配的值。
您可以使用命名参数:
keys.foreach {
case `matchMe` => somethingSpecial(matchMe)
case nonSpecialKey => somethingNormal(nonSpecialKey, calcWith(nonSpecialKey))
}
没有任何限制,它将匹配任何值。请注意 case
的顺序很重要,因为 case x => ...
匹配任何内容,并且基本上会缩短其他 case
语句。
顺便说一句,我不认为您的 somethingSpecial(_)
能达到您 want/expect 的目的。这只是 x => somethingSpecial(x)
的缩写,而不是 somethingSpecial(matchMe)
。