2014-11-26 7 views
0

Я новичок в scala, и я выполняю некоторые упражнения из книги, чтобы реализовать список.найдено scala.Int (0) required Int 0

У меня есть метод sum, чтобы добавить все числа в список. Я использую TDD-подход, поэтому сначала я просто возвращаю 0, чтобы он сработал. Но компилятор жалуется на несоответствие типов. Он ожидает, что Int получил scala.Int.

def sum[Int](as: MList[Int]): Int = 
{ 
    0 
} 

Пожаловаться сообщения:

MList.scala:17: error: type mismatch; 
found : scala.Int(0) 
required: Int 
    0 
    ^
one error found 

Так я пытаюсь изменить на

def sum[scala.Int](as: MList[scala.Int]): scala.Int = 
{ 
    0 
} 

Компилятор жалуется, что . не должен существовать в [scala.Int].

Я также попытался бросание от 0 до new Int(0), Int(0), (Int)0, new Int (я родом из C++) в соответствии с типом возвращаемого, и он не работает тоже.

В чем разница между scala.Int(0) и литералом 0? Разве я забыл включить какой-то пакет, такой как встроенный пакет чисел?

ответ

4

Проблема заключается в том, что здесь

def sum[Int](as: MList[Int]): Int = 0 
     ^^^^^ 

Вы объявляя новый тип, называемый Int, что тени scala.Int. Ваш метод sum является общим, а Int - это имя его параметра типа.

Просто удалите параметр типа.

def sum(as: MList[Int]): Int = 0 
+0

Спасибо! Оно работает. Поскольку предыдущий метод, который я реализовал, является 'def apply [A] (as: A *): MList [A] = {...}', я просто заменяю A на Int. ха-ха –

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