2016-11-10 8 views
-2

Я пытаюсь создать функцию поиска, поэтому пользователь может выполнить поиск по списку с использованием значения ключа, однако метод Im пытается использовать возвращает несоответствие типа, вынул ненужный код и показал, что такое обязательный. Как я устанавливаю точки, чтобы принимать Int, а не «Any»?Scala Type Mismatch Mapping

«типа Любой не соответствует типа Int»

val mapdata = readFile("data.txt") 


    def handleTwo(): Boolean = { 
    mnuShowPointsForTeam(currentPointsForTeam) 
    true 
    } 




def mnuShowPointsForTeam(f: (String) => (String, Int)) = { 
    print("Team>") 
    val data = f(readLine) 
    println(s"${data._1}: ${data._2}") 
    } 



    def currentPointsForTeam(team: String): (String, Int) = { 
    val points = mapdata.get(team) match{ 
     case Some(p) => p 
     case None => 0 
    } 
    (team, points) 
    } 

В data.txt

SK1, 9, 7, 2, 0, 7, 3, 7, 9, 1, 2, 8, 1, 9, 6, 5, 3, 2, 2, 7, 2, 8, 5, 4, 5, 1, 6, 5, 2, 4, 1 
SK2, 0, 7, 6, 3, 3, 3, 1, 6, 9, 2, 9, 7, 8, 7, 3, 6, 3, 5, 5, 2, 9, 7, 3, 4, 6, 3, 4, 3, 4, 1 
SK4, 2, 9, 5, 7, 0, 8, 6, 6, 7, 9, 0, 1, 3, 1, 6, 0, 0, 1, 3, 8, 5, 4, 0, 9, 7, 1, 4, 5, 2, 8 
SK5, 2, 6, 8, 0, 3, 5, 5, 2, 5, 9, 4, 5, 3, 5, 7, 8, 8, 2, 5, 9, 3, 8, 6, 7, 8, 7, 4, 1, 2, 3 
SK6, 2, 7, 5, 9, 1, 9, 8, 4, 1, 7, 3, 7, 0, 8, 4, 5, 9, 2, 4, 4, 8, 7, 9, 2, 2, 7, 9, 1, 6, 9 
SK7, 6, 9, 5, 0, 0, 0, 0, 5, 8, 3, 8, 7, 1, 9, 6, 1, 5, 3, 4, 7, 9, 5, 5, 9, 1, 4, 4, 0, 2, 0 
SK8, 2, 8, 8, 3, 1, 1, 0, 8, 5, 9, 0, 3, 1, 6, 8, 7, 9, 6, 7, 7, 0, 9, 5, 2, 5, 0, 2, 1, 8, 6 
SK9, 7, 1, 8, 8, 4, 4, 2, 2, 7, 4, 0, 6, 9, 5, 5, 4, 9, 1, 8, 6, 3, 4, 8, 2, 7, 9, 7, 2, 6, 6 
+0

Каков тип 'mapData'? Что такое возвращаемое значение для 'mnuShowPointsForTeam' (теперь это просто printlns)? – Thilo

+0

обновил вопрос, mapdata - это внешний txt-файл, да он просто распечатывает введенное значение ключа команды @Thilo –

+0

Но каков тип 'mapData'? Это 'Map [String, Any]'? Если вы не можете сделать это «Map [String, Int]», тогда вам нужно преобразовать/трансформировать в Int внутри части 'some Some (p)'. – Thilo

ответ

3

Похоже, что вы хотите вернуть кортеж с List[Int], а не только один Int ,

Если так

def currentPointsForTeam(team: String): (String, List[Int]) = 
    (team, mapdata.get(team).getOrElse(List.empty)) 
    // Or maybe List(0) instead of List.empty 

Если вы хотите вернуть один Int, вы должны сказать, как идти от List[Int] на карте для одного значения. Может быть, сумма?

def currentPointsForTeam(team: String): (String, Int) = 
    (team, mapdata.get(team).map(_.sum).getOrElse(0)) 
+0

Голова гвоздя, это именно то, чего я пытался достичь! спасибо –

+0

Первый пример работал отлично, но второй берет в String Int, а не в String List int, как это работает? Просто протестируйте его, и я получаю несоответствие типа @Thilo –

+0

Игнорируйте этот последний комментарий, напечатанный до того, как я подумал! Это сейчас работает, спасибо снова –