У меня есть такое заявление о совпадении:
i match {
case x if x == 0 ⇒
romanNumeral
case x if x >= 1000 ⇒
this.roman(i - 1000, s"${romanNumeral}M")
case x if x >= 900 ⇒
this.roman(i - 900, s"${romanNumeral}CM")
// etc.
В зависимости от того, как это отформатировано, это может быть около 30 строк избыточного кода. Поэтому мне интересно, можно ли сделать этот код более сухим.
Итак, я создал частичную функцию:
private def toRoman(upperGuard: Int, token: String, romanNumeral: String): String = {
case value: Int if value >= upperGuard ⇒
this.roman(upperGuard - 1, s"$romanNumeral$token")
}
который я затем попытался включить в вышеуказанный сопоставитель, например:
i match {
case x if x == 0 ⇒
romanNumeral
toRoman(1000, "M", romanNumeral)
toRoman(900, "CM", romanNumeral)
// etc.
... Но это не сработает, потому что компилятор Scala не распознает эти функции как операторы case, которые он ищет.
Есть ли способ заставить это работать?