关于在 Scala 中表达的简单模式的非法开始
illegal start of simple pattern about for expression in scala
object main {
def main(args: Array[String]): Unit = {
for (
i <- 1 to 10
if i % 2 == 0;
j <- 2 to 8
if j % 2 == 1;
) {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}
编译器抱怨:illegal start of simple pattern.
如果我删除第二个分号:
object main {
def main(args: Array[String]): Unit = {
for (
i <- 1 to 10
if i % 2 == 0;
j <- 2 to 8
if j % 2 == 1
) {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}
它工作正常。
如何解释这种行为?
for
comprehension 可以使用 ()
或 {}
来定义。 ()
的分隔符是 ;
,{}
的分隔符是 new line
。
你把两者混在一起了。
尝试以下(使用 {}
和 new line
分隔符):
object main {
def main(args: Array[String]): Unit = {
for {
i <- 1 to 10
if i % 2 == 0
j <- 2 to 8
if j % 2 == 1
} {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}
下面一个使用()
和;
分隔符:
object main {
def main(args: Array[String]): Unit = {
for (i <- 1 to 10 if i % 2 == 0; j <- 2 to 8 if j % 2 == 1) {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}
object main {
def main(args: Array[String]): Unit = {
for (
i <- 1 to 10
if i % 2 == 0;
j <- 2 to 8
if j % 2 == 1;
) {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}
编译器抱怨:illegal start of simple pattern.
如果我删除第二个分号:
object main {
def main(args: Array[String]): Unit = {
for (
i <- 1 to 10
if i % 2 == 0;
j <- 2 to 8
if j % 2 == 1
) {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}
它工作正常。
如何解释这种行为?
for
comprehension 可以使用 ()
或 {}
来定义。 ()
的分隔符是 ;
,{}
的分隔符是 new line
。
你把两者混在一起了。
尝试以下(使用 {}
和 new line
分隔符):
object main {
def main(args: Array[String]): Unit = {
for {
i <- 1 to 10
if i % 2 == 0
j <- 2 to 8
if j % 2 == 1
} {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}
下面一个使用()
和;
分隔符:
object main {
def main(args: Array[String]): Unit = {
for (i <- 1 to 10 if i % 2 == 0; j <- 2 to 8 if j % 2 == 1) {
println(s"i: ${i}, j: ${j}")
val t = i + j
println(s"t: ${t}")
}
}
}