关于在 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}")
    }
  }
}