2013-04-12 12 views
6

Ho appena iniziato l'apprendimento di scala. Ho ottenuto un errore "inizio illegale di semplice espressione" in Eclipse durante il tentativo di implementare una funzione ricorsiva:Inizio non valido della semplice espressione in Scala

def foo(total: Int, nums: List[Int]): 
    if(total % nums.sorted.head != 0) 
    0 
    else 
    recur(total, nums.sorted.reverse, 0) 

def recur(total: Int, nums: List[Int], index: Int): Int = 
    var sum = 0 // ***** This line complained "illegal start of simple expression" 
       // ... other codes unrelated to the question. A return value is included. 

Qualcuno può dirmi che cosa ho fatto di sbagliato sulla definizione di una variabile all'interno di una funzione (ricorsiva)? Ho fatto una ricerca online ma non riesco a spiegare questo errore.

risposta

6

una dichiarazione di variabile (var) non restituisce un valore, quindi è necessario restituire un valore in qualche modo, ecco come il codice potrebbe essere simile:

object Main { 

    def foo(total: Int, coins: List[Int]): Int = { 

    if (total % coins.sorted.head != 0) 
     0 
    else 
     recur(total, coins.sorted.reverse, 0) 

    def recur(total: Int, coins: List[Int], index: Int): Int = { 
     var sum = 0 
     sum 
    } 

    } 


} 
+0

È fatto. Ho cancellato i miei commenti precedenti. – ChuanRocks

+2

questo è il punto più importante da ricordare durante l'utilizzo di scala. Le assegnazioni restituiranno '' 'Unit''' – Amareswar

+0

tutte pulite ora :) –

0

Il rientro sembra implicare che recur è dentro count, ma dal momento che non hai piazzato { e } lo circonda, count è solo l'altra se-e recur è solo l'var (che è illegale - dovete restituire qualcosa).

0

Ho avuto un problema simile. Esempio 8.1 si trovano nel libro che sembrava:

object LongLines { 

def processFile(filename: String, width: Int) **{** 
    val source = Source.fromFile(filename) 
    for (line <- source.getLines) 
    processLine(filename, width, line) 
**}** 

Nota: il "def ProcessFile (nome del file: String, larghezza: Int) {" e fine "}"

ho circondato il corpo 'metodo' con {} e scala lo ha compilato senza messaggi di errore.

Problemi correlati