2013-07-17 10 views
5

Voglio scrivere una funzione come questa:Come posso scrivere una funzione che esegue un'istruzione case con un tipo generico?

def genericCase[T]() : PartialFunction[Any, T] = { 
    case Wrapper(_, item: T) => item 
    case Wrapper(item: T, _) => item 
} 

In parole, voglio un modo per riutilizzare la struttura di un pattern match con diversi tipi.
Il compilatore mi dice che a causa della cancellazione del tipo, lo case x: T non corrisponderà mai. Qual è un'alternativa per fare questo tipo di dichiarazione generica? Ho anche provato a utilizzare i tipi nell'API di riflessione come argomento della funzione, ma non siamo riusciti a capirlo.

risposta

5

Tutto ciò che serve è quello di aggiungere un implicito ClassTag che consente di abbinare in una classe generica:

import scala.reflect.ClassTag 

def genericCase[T: ClassTag]() : PartialFunction[Any, T] = { 
case Wrapper(_, item: T) => item 
case Wrapper(item: T, _) => item 
} 
Problemi correlati