基本Scala for循环问题

Clo*_*oud 3 scala

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

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

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

  }
}
Run Code Online (Sandbox Code Playgroud)

编译时出错:

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
Run Code Online (Sandbox Code Playgroud)

我使用的是scala版本2.9.1

不知道是什么问题..............?

dhg*_*dhg 8

for (i <- 1 to 10 if i % 2 == 0)
  println("Counting " + i)
Run Code Online (Sandbox Code Playgroud)


gil*_*och 7

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

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

或括号;(,)括号内:

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

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

例如,而不是写:

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

你可以简单地写:

for{
    i <- 1 to n
    if(someCondition(i))
    j <- 1 to m
    if(otherCondition(j))
}{
    //Do something
}
Run Code Online (Sandbox Code Playgroud)

侧面注意:
当您扩展App(该名称有特征Predef)时,您不需要定义主方法.您可以简单地在以下大括号之间编写代码object:

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

  • 你可以跳过生成器和if-guard之间的分号:`for(i < - 1到10,如果i%2 == 0)println(i)` (4认同)

RKu*_*her 6

看看Range类的"by"方法,按2计算

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

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

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

或者另一种方式:

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"))
  }
}
Run Code Online (Sandbox Code Playgroud)