Scala: конвертировать совпадение в соответствие шаблону с анонимной функцией - со значениями
как и аналогичный вопрос: Преобразование утверждения соответствия в частичную функцию при использовании foreach. Теперь аналогично 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
}
Обратите внимание, что во втором случае я не могу использовать _
, так как он мне нужен дважды. Есть ли способ использовать анонимную функцию сопоставления шаблонов здесь?
Ответы
Ответ 1
Вы не можете использовать подстановочный знак _
здесь, его цель - указать, что вам не важно, какое значение вы сравниваете.
Вы можете использовать именованный параметр:
keys.foreach {
case `matchMe` => somethingSpecial(matchMe)
case nonSpecialKey => somethingNormal(nonSpecialKey, calcWith(nonSpecialKey))
}
Без каких-либо ограничений на него он будет соответствовать любому значению. Обратите внимание, что порядок case
важен, так как case x => ...
соответствует чему-либо и будет существенно сокращать другие операторы case
.
В стороне, я не думаю, что ваш somethingSpecial(_)
делает то, что вы хотите/ожидаете. Это только короткая версия x => somethingSpecial(x)
, а не somethingSpecial(matchMe)
.