Scala ничего не выводит, хотя определение с явными типами - PullRequest
0 голосов
/ 07 июня 2018

В следующем коде я получаю сообщение об ошибке

Error:(48, 11) type mismatch;
 found   : (Int, Map[Int,Option[List[Int]]])
 required: (Int, Nothing)
          f



 def tuplesWithRestrictions1(): (Int, Map[Int, Option[List[Int]]]) = {
    val df = new DecimalFormat("#")
    df.setMaximumFractionDigits(0)
    val result = ((0 until 1000) foldLeft ((0, Map.empty(Int, Some(List.empty[Int]))))) {
      (r: (Int, Map[Int, Option[List[Int]]]), x: Int) => {
        val str = df.format(x).toCharArray
        if (str.contains('7')) {
          import scala.math._
          val v = floor(log(x)) - 1
          val v1 = (pow(10, v)).toInt
          val m = (r._2).get(v1) {
            case None => r._2 + (v1 -> List(x))
            case Some(xs: List[Int]) => r._2 updated(x, xs :+ x)
          }
          val f = (r._1 + 1, m)
          f
        } else r
      }
    }
    result
  }

Почему компилятор ничего не выводит, хотя я явно указываю, что результат (Int, Map [Int, Option [List [Int])]]) тип ?и как исправить эту проблему.

1 Ответ

0 голосов
/ 07 июня 2018

Ваш val m = (r._2).get(v1) возвращает Option[Option[List[Int]]].Я думаю, вы должны выполнить сопоставление с шаблоном внутри сопоставления с шаблоном, чтобы получить желаемые результаты.

...