2015-12-12 2 views
0

Я делаю курс Мартина Одерского о Скале. В одном из заданий у меня следующий тип:Scala - ошибка при прохождении параметров

type Occurrences = List[(Char, Int)] 

я определил метод, который вычитает элемент типа (Char, Int) из элемента типа Occurrences.

def subtractOne(x: Occurrences, (char: Char, nr: Int)): Occurrences = x match { 
    case List() => throw new Exception("can not subtract") 
    case (char, nr2) :: ocs => { 
     if(nr2 > nr) (char, nr2 - nr) :: ocs 
     else if(nr2 == nr) ocs 
     else throw new Exception("can not subtract") 
    } 
    case _ :: ocs => subtractOne(ocs, (char, nr)) 
    } 

Однако я получаю некоторые непонятные ошибки на первой линии: Wrong parameter и Definition or declaration expected.

Есть ли что-то не так с тем, как я объявил параметры?

+1

Вы не можете «шаблон матч» кортеж в списке параметров метода , Используйте 'def subtractOne (x: Occurrences, e: (Char, Int)): Occurrences' затем ссылаются на элементы вашего кортежа через' e._1' и 'e._2' – metaphori

ответ

2

Не используйте скобки в списке параметров. Если вы не хотите определять кортеж, но это должно быть сделано с одним именем.

def subtractOne(x: Occurrences, char: Char, nr: Int): Occurrences = x match {

2

кортежей определены под одним названием - charAndNr: (Char, Int) Также Nil предпочтительно Перечислите()

Смежные вопросы