Sul compilando il seguente codice con Scala 2.7.3,Perché l'inferenza di punto e virgola di Scala fallisce qui?
package spoj
object Prime1 {
def main(args: Array[String]) {
def isPrime(n: Int) = (n != 1) && (2 to n/2 forall (n % _ != 0))
val read = new java.util.Scanner(System.in)
var nTests = read nextInt // [*]
while(nTests > 0) {
val (start, end) = (read nextInt, read nextInt)
start to end filter(isPrime(_)) foreach println
println
nTests -= 1
}
}
}
ottengo il seguente errore di compilazione:
PRIME1.scala:8: error: illegal start of simple expression
while(nTests > 0) {
^
PRIME1.scala:14: error: block must end in result expression, not in definition
}
^
two errors found
Quando aggiungo un punto e virgola alla fine della riga commentato come [*]
, il programma si compila bene. Qualcuno può spiegare perché l'inferenza di punto e virgola di Scala non funziona su quella particolare linea?
Appena fuori tema, '2 a n/2' può essere sostituito con' 2 a Math.sqrt (n) '- è la soluzione canonica, anche se non so se fornirà prestazioni migliori (Penso, non lo farà). – incarnate
so che questo è un thread OLD, ma potresti mettere esplicitamente il punto e virgola dopo la riga 'read nextInt'? o questo è un problema perché non c'è argomento fornito a 'nextInt'? – Ramy
@Ramy: leggi le risposte. – missingfaktor