2013-06-19 2 views
0

Я читаю "Программирование в Scala и один из примеров кода ниже:Как переопределить Map

Ниже код дает эту ошибку:

Multiple markers at this line 
    - type mismatch; found : Unit required: B 
    - type mismatch; found : Unit required: B 

    abstract class CustomMap[A, B] extends Map[A, B] { 

    def get(key: A) : Option[B] = { 
     if (contains(key)){ 
     new Some(getValue(key)) 
     } 
     else 
     None 
    } 

    def getValue(key : A) = { 

    } 

    } 

Ошибка возникает в строке:

new Some(getValue(key)) 

Какую форму должен взять тип возврата? Я попытался вернуть int & String компилятор не принимает его.

+0

Почему вы хотите это сделать? Редко необходимо подклассифицировать встроенные коллекции, но если вам действительно нужно, вы должны сначала прочитать документацию по коллекциям (http://docs.scala-lang.org/overviews/collections/introduction.html). –

+0

@Aaron Novstrup см. Вопрос edit –

+0

Боюсь, вам придется предоставить дополнительную информацию о том, чего вы надеетесь достичь. Ошибка компиляции легко фиксируется (например, определяя 'getValue' как' this (key) ', но это не кажется особенно полезным. –

ответ

1

В дополнение к ошибке, отмеченной ТАСС, это выглядит как артефакт того факта, что вы не внедрили getValue. Попробуйте определения getValue, как

def getValue(key: A): B = ??? 

, пока вы не будете готовы обеспечить реализацию.

Я смущен вашим вопросом: «Какую форму должен взять тип возврата?». Вы имеете в виду тип возврата getValue? Он должен вернуть B.

+0

Так как «B» - это общий тип, я не могу вернуть строку? –

+1

Поскольку 'B' является общим типом с точки зрения« CustomMap », вы не можете (в общем случае) возвращает String, поскольку String может или не может соответствовать «B» для определенного экземпляра «CustomMap». Было бы иначе, если бы вы объявили его как «CustomMap [A] extends Map [A, String]». –

1

Правильный синтаксис: Some(getValue(key)).

+0

удаление нового ключевого слова так как ваш ответ приводит к той же ошибке. –

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