Я изучаю scala, и этот вопрос может быть глупым, но ... почему?scala: ошибка несоответствия типа - найден T, обязательно Строка
Например, это нормально:
def matchList(ls: List[Int]): List[Int] = ls match {
case 1 :: rest => rest
case a :: b :: rest => (a + b) :: rest
case _ => ls
}
matchList: (ls: List[Int])List[Int]
Но функция с параметром типа не компилируется:
def matchList[T](ls: List[T]): List[T] = ls match {
case 1 :: rest => rest
case a :: b :: rest => (a + b) :: rest
case _ => ls
}
<console>:10: error: type mismatch;
found : T
required: String
case a :: b :: rest => (a + b) :: rest
Почему?
Обязательно ли он, чтобы операция была ассоциативной? – huitseeker
Он этого не уточнил. И я не могу придумать случай, когда ассоциативность повредит его проблеме. – missingfaktor
Вы правы, это не будет: 'matchList'combines не более двух элементов, поэтому ассоциативность не имеет значения. 'twas просто напоминание. Полугруппа имеет более крупную спецификацию, чем просто операцию типа T -> T -> T'. :) – huitseeker