2013-03-23 14 views
10

proste pytanie, mam problem gdzie korzystając mapTo od wyniku zwrócić wyniki w błąd kompilatora wzdłuż linii:Scala Future mapTo nie skompilować z powodu brakujących ClassTag

not found: value ClassTag 

na przykład:

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

Nie rozumiem, dlaczego do wykonania obsady potrzebny jest ClassTag? Jeśli podstawię klasę standardową z Predef, taką jak String, tak jak w (job ? "Run").mapTo[String], która kompiluje OK.

Dzieje się tak, kiedy definiują prawo klasę wyżej danej linii, jak w:

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

wciąż otrzymuję ten sam problem.

Dzięki, Jason.

Należy również stwierdzić, że używam Scala 2.10.0 i Akka 2.1.0 (jeśli to robi różnicę).

+0

Twój kod wygląda na jak dotąd prawidłowy - możesz więc wysłać import, którego używałeś? Może brak importu. –

+1

Właśnie znalazłem [komentarz] (http://grokbase.com/p/gg/scala-language/126k8nt1fx/incompatibility-between-scala-2-10-m3-and-m4) o niekompatybilności w różnych kamieniach milowych Scala 2.10.0. Sugeruje to 'import reflect.ClassTag'. Spróbuj użyć Scala 2.10.1 i Akka 2.1.1, jeśli jest to problem, który został naprawiony dopiero niedawno. –

+0

@michael_s, geniuszu, dzięki za to, że dodanie 'import reflect.ClassTag' załatwiło sprawę! Nie próbowałem już aktualizować wersji Scala, nieco niechętnie zmieniają zależności pakietu w tym momencie cyklu rozwojowego. Jeśli chcesz opublikować swój komentarz jako odpowiedź, mogę oznaczyć go poprawnie i nadać mu pewien status. – JMac

Odpowiedz

15

To wydaje się być szczególnym problemem ze Scala 2.10.0 wersji

Po dodaniu

import reflect.ClassTag 

niejawnie używany parametr w mapToClassTag powinno działać.

To albo aktualizacja do nowszej wersji Akka/Scala (które powinny być preferowane, jeśli to możliwe).

+0

2.10.1 został wydany około półtora tygodnia temu (2013/3/13). –

+0

Nadal zepsute z Akka 2.1.2 i Scala 2.10.1, btw. – dOxxx

+0

Jeśli używasz generycznych, musiałem dodać 'niejawny tag arg: ClassTag [R]'. Przykład: 'def reqReply [M, R] (wiadomość: M, proces: R => Jednostka) (niejawny znacznik: ClassTag [R]) = (wiadomość myAkkaService?) .onComplete {case Success (Some (r: R)) => process (r) ...} // Uproszczony przykład' – Magnus

Powiązane problemy