在編譯使用Scala 2.7.3下面的代碼,爲什麼Scala的分號推斷在這裏失敗?
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
}
}
}
我得到以下編譯時錯誤:
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
當我添加在該行的最後一個分號評論爲[*]
,該程序編譯好。任何人都可以請解釋爲什麼Scala的分號推斷無法在該特定行上工作?
只是場外的話題,'2到n/2'可以被替換成'2 Math.sqrt(N)' - 這是典型的解決方案,雖然我不知道這是否會提供更好的性能(我想,它不會)。 – incarnate 2010-02-14 07:57:16
我知道這是一箇舊線程,但是你能否明確地在'read nextInt'後面加分號?或者這是一個問題,因爲沒有提供給'nextInt'的參數? – Ramy 2011-08-05 02:32:00
@Ramy:閱讀答案。 – missingfaktor 2011-08-05 06:22:22