3

ここでは基本的な 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ます)、メイン メソッドを定義する必要はありません。の中括弧の間にコードを書くだけです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 シェルを使用することです。

于 2014-11-13T02:36:09.737 に答える