基本Scala for循环问题

时间:2012-11-01 06:42:22

标签: scala

我正在尝试学习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

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

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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(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
}

侧面注意:
当您扩展AppPredef中有该名称的特征)时,您无需定义主方法。您只需在object的大括号中编写代码:

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

答案 2 :(得分:6)

看一下&#34; by&#34; Range类的方法按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"))
  }
}

答案 3 :(得分:1)

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

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

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

  }

}

答案 4 :(得分:0)

这是一个简单的例子;

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

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

答案 5 :(得分:0)

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

for ( i <- 1 to 10 if (i%2==0) ) yield i