2014-07-17 6 views
1

J'écris un travail MapReduce dans Scalding et j'ai de la difficulté à compiler du code qui me semble parfaitement légitime.Le code légitime ne se compile pas dans Scalding

val persistenceBins = List[Int](1000 * 60 * 60, 2 * 1000 * 60 * 60, 4 * 1000 * 60 * 60) 
val persistenceValues = persistenceBins.map(bin: Int => (bin, getPersistenceValues(connections, bin))) 

connexions est RichPipe. getPersistenceValues ​​est défini dans la même classe que le code ci-dessus, comme:

def getPersistenceValues(connections: RichPipe, binSize: Int): RichPipe = { ... } 

Je continue de recevoir des erreurs du genre:

Error:(45, 87) ')' expected but '(' found. 
val persistenceValues = persistenceBins.map(bin: Int => (bin, getPersistenceValues(connections, bin))) 
                       ^
Error:(45, 107) ';' expected but ')' found. 
val persistenceValues = persistenceBins.map(bin: Int => (bin, getPersistenceValues(connections, bin))) 
                            ^

Je ne peux pas comprendre ce qui se passe. Les erreurs semblent sans signification pour moi. Qu'est-ce que je fais mal?

Répondre

4

Dans votre cas, vous ne pouvez pas ignorer les parenthèses. Ce code devrait vous aider à comprendre ce qui ne va pas.

scala> val persistenceBins = List[Int](1000 * 60 * 60, 2 * 1000 * 60 * 60, 4 * 1000 * 60 * 60) 
persistenceBins: List[Int] = List(3600000, 7200000, 14400000) 

scala> val persistenceValues = persistenceBins.map((bin: Int) => (bin, 0)) 
persistenceValues: List[(Int, Int)] = List((3600000,0), (7200000,0), (14400000,0)) 
+0

La parenthèse autour (bin: Int) l'a fixée. Je ne peux pas croire que j'ai passé plus d'une heure à essayer de comprendre cela. Pourquoi est-ce arrivé? Je n'ai jamais vu des parenthèses utilisées de la sorte dans un livre de Scala et aucune mention de cela. Merci) –

+0

@SavageReader Vous pouvez ignorer les parenthèses uniquement si votre fonction lambda a un argument sans type déclaré. Dans les autres cas, vous devez vous souvenir de la parenthèse. –

Questions connexes