2013-03-23 13 views
10

domanda semplice, ho un problema in cui utilizzando mapTo sul risultato di chiedere risultati in un errore di compilazione lungo le linee di:Scala Future mapTo non riesce a compilare a causa della mancanza ClassTag

not found: value ClassTag 

Ad esempio:

(job ? "Run").mapTo[Result] 
       ^

Non capisco perché sia ​​necessario un ClassTag per eseguire il cast? Se sostituisco una classe standard da Predef come String come in (job ? "Run").mapTo[String] che compila OK.

Questo accade quando definisco il diritto di classe sopra la linea in questione, come in:

class Result {} 
(job ? "Run").mapTo[Result] 

ho ancora lo stesso problema.

Grazie, Jason.

Devo anche dire che sto usando Scala 2.10.0 e Akka 2.1.0 (se questo fa la differenza).

+0

Il tuo codice sembra OK finora - quindi potresti pubblicare le importazioni che hai usato? Forse manca un'importazione. –

+1

Ho appena trovato un [commento] (http://grokbase.com/p/gg/scala-language/126k8nt1fx/incompatibility-between-scala-2-10-m3-and-m4) sulle incompatibilità nelle diverse Milestone di Scala 2.10.0. Suggerisce di importare reflect.ClassTag'. Prova ad usare Scala 2.10.1 e Akka 2.1.1 se questo è un problema che è stato risolto solo di recente. –

+0

@michael_s, genio, grazie per questo, aggiungendo "import reflect.ClassTag' ha fatto il trucco! Non ho ancora provato ad aggiornare le versioni di Scala, il bit haath per cambiare le dipendenze dei pacchetti a questo punto del ciclo di sviluppo. Se vuoi pubblicare il tuo commento come risposta, posso contrassegnarlo correttamente e dargli uno stato. – JMac

risposta

15

questo sembra essere un problema particolare con la Scala 2.10.0 versione

Dopo aver aggiunto

import reflect.ClassTag 

il implicitamente utilizzato ClassTag parametro nel mapTo dovrebbe funzionare.

O quello o l'aggiornamento a una versione più recente di Akka/Scala (che dovrebbe essere preferibile, se possibile).

+0

2.10.1 è stato rilasciato circa una settimana e mezzo fa (2013/3/13). –

+0

Ancora rotto con Akka 2.1.2 e Scala 2.10.1, btw. – dOxxx

+0

Se si usano i generici, ho dovuto aggiungere anche "tag implicit arg: ClassTag [R]". Esempio: 'def reqReply [M, R] (messaggio: M, process: R => Unit) (tag implicito: ClassTag [R]) = (myAkkaService? Message). OnComplete {case Success (Some (r: R)) => processo (r) ...} // Esempio semplificato' – Magnus

Problemi correlati