Почему параметр типа шаблона не может быть привязан к Scala? - PullRequest
2 голосов
/ 29 ноября 2010

У меня есть класс типизированной пары:

class TypedPair[T]

, и я хочу применить определенную функцию к их гетерогенной последовательности:

def process[T](entry: TypedPair[T]) = {/* something */}

Почему это не работает?

def apply(entries: TypedPair[_]*) = entries.foreach(process)

Сбой из-за ошибки:

error: polymorphic expression cannot be instantiated to expected type;
 found   : [T](TypedPair[T]) => Unit
 required: (TypedPair[_]) => ?
         def apply(entries: TypedPair[_]*) = entries.foreach(process)

Не помню, чтобы я сталкивался с этой проблемой в Java ...

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

В этом случае у компилятора возникли проблемы с поиском анонимного метода. Когда вы добавили фиктивный параметр, вы также изменили синтаксис, чтобы помочь компилятору с ним, поэтому будет работать следующее:

def apply(entries: TypedPair[_]*) = entries.foreach(process(_))
0 голосов
/ 29 ноября 2010

Вы объявили экзистенциальный тип:

def apply(entries: TypedPair[_]*) = entries.foreach(process)

эквивалентно

def apply(entries: TypedPair[t] forSome { type t }*) = entries.foreach(process)

Я не уверен, что это то, что вы хотели или нет.

...