Al compilar el código siguiente con Scala 2.7.3,¿Por qué la inferencia de punto y coma de Scala falla aquí?
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
}
}
}
me sale el siguiente error de tiempo de compilación:
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
Cuando agrego un punto y coma al final de la línea comentada como [*]
, el programa compila bien ¿Puede alguien explicar por qué la inferencia de punto y coma de Scala no funciona en esa línea en particular?
Justo fuera del tema, '2 a n/2' se puede reemplazar por' 2 en Math.sqrt (n) '- es la solución canónica, aunque no sé si proporcionará un mejor rendimiento (Creo que no) – incarnate
sé que este es un hilo VIEJO, pero ¿podría poner explícitamente el punto y coma después de la línea 'read nextInt'? ¿o es un problema porque no se proporciona ningún argumento para 'nextInt'? – Ramy
@Ramy: Lee las respuestas. – missingfaktor