我正在尝试学习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
不知道是什么问题..............?
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)
看看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)
| 归档时间: |
|
| 查看次数: |
7645 次 |
| 最近记录: |