On compiling the following code with Scala 2.7.3,
package spoj
object Prime1 {
def main(args: Array[String]) {
def isPrime(n: Int) = (n != 1) &&am
Is it because scala is assuming that you are using the syntax a foo b
(equivalent to a.foo(b)
) in your call to readInt
. That is, it assumes that the while
loop is the argument to readInt
(recall that every expression has a type) and hence the last statement is a declaration:
var ntests = read nextInt x
wherex
is your while block.
I must say that, as a point of preference, I've now returned to using the usual a.foo(b)
syntax over a foo b
unless specifically working with a DSL which was designed with that use in mind (like actors' a ! b
). It makes things much clearer in general and you don't get bitten by weird stuff like this!