3

我正在尝试学习 scala,这里我使用基本的 for 循环,但是在编译时出现错误。

object App {    
  def main(args: Array[String]) {

    for (i <- 1 to 10; i % 2 == 0)
      Console.println("Counting " + i)

  }
}

编译时出错:

fortest.scala:5: error: '<-' expected but ')' found.

    for (i <- 1 to 10; i % 2 == 0)
                                 ^
fortest.scala:7: error: illegal start of simple expression

  }
  ^

two errors found

我正在使用 scala 版本 2.9.1

任何想法是什么问题........?

4

6 回答 6

8
for (i <- 1 to 10 if i % 2 == 0)
  println("Counting " + i)
于 2012-11-01T06:51:52.907 回答
7

Scala 不是 Java,因此您不能使用常规的 Java 语法。相反,您必须这样做:

for{
    i <- 1 to 10
    if(i % 2 == 0)
}{println("Counting " + i)}

或带;分隔符,在(,)括号内:

for(i <- 1 to 10;if(i % 2 == 0)){
    println("Counting " + i)
}

另外,请注意 Scala 的 for 表达式具有一些非常漂亮的功能。您可以使用带有多个“循环迭代器”和条件的 for 表达式。

例如,不要写:

for(i <- 1 to n; if(someCondition(i)){
    for(j <- 1 to m; if(otherCondition(j)){
         //Do something
    }
}

你可以简单地写:

for{
    i <- 1 to n
    if(someCondition(i))
    j <- 1 to m
    if(otherCondition(j))
}{
    //Do something
}

旁注:
当您扩展时App(在 中有该名称的特征Predef),您不需要定义 main 方法。您可以简单地在花括号之间编写代码object

object MyClazz extends App {
    for(i <- 1 to 10;if(i % 2 == 0)){
        println("Counting " + i)
    }
}
于 2012-11-01T06:45:33.177 回答
6

看一下Range类的“by”方法按 2 计数

object App {    
  def main(args: Array[String]) {
    for (i <- 2 to 10 by 2)
      Console.println("Counting " + i)
  }
}

或者,就像其他人已经说过的那样,您可以通过这样做来修复循环

object App {    
  def main(args: Array[String]) {
    for {
         i <- 1 to 10
         if i % 2 == 0
        }
      Console.println("Counting " + i)
  }
}

或者另一种方式:

object App {    
  def main(args: Array[String]) {
    val evenNumbers = for {
         i <- 1 to 10
         if i % 2 == 0
        } yield i
    Console.println(evenNumbers.mkString("\n"))
  }
}
于 2012-11-01T19:48:14.477 回答
1

模 2 条件可以移动到 if 子句。

object App {    
  def main(args: Array[String]) {

    for (i <- 1 to 10)
      if(i % 2 == 0)
      Console.println("Counting " + i)

  }

}
于 2012-11-01T06:45:46.093 回答
0

这是一个简单的例子;

 for (i <- List(1, 2, 3) if i < 2) println(i)

检查代码的最佳方法是使用 scala shell。

于 2014-11-13T02:36:09.737 回答
0

基本上,您正在尝试使用 for-loop + iterator gaurd。请找到以下语法

for ( i <- 1 to 10 if (i%2==0) ) yield i
于 2017-10-24T13:59:27.093 回答