遍历
var arr = Array("001a", "001b", "002a")
for (a <- arr) {
print(a + " ")
}
println()
for (i <- 0 to arr.length - 1) {
print(arr(i) + " ")
}
println()
for (i <- 0 until arr.length) {
print(arr(i) + " ")
}
过滤
如果想过滤出以”b”结尾的元素,可以这样:for (a <- arr) {
if (!a.endsWith("b")) {
print(a + " ")
}
}
其实可以更简单:
for (a <- arr if !a.endsWith("b")) {
print(a + " ")
}
如果还只想要以”001”开头:
var arr = Array("001a", "001b", "002a")
for (a <- arr if !a.endsWith("b"); if a.startsWith("001")) {
print(a + " ")
}
嵌套循环
for (i <- 0 to 2; j <- 1 to 3 if i != j) {
print(i * 10 + j)
print(" ")
}
//1 2 3 12 13 21 23
构造新集合
以上的例子都只是遍历完后就释放,除此之外,还可以创建一个值去记录每一次的迭代,只要在for表达式之前加上关键字yield。val c = Array(2, 4, 5)
val result = for (elem <- c) yield elem * 2
println(Arrays.toString(result)) //[4, 8, 10]
异常
抛出异常:val half =
if (arg % 2 == 0) arg / 2
else throw new RuntimeException()
捕获异常:
try {
val a = if (false) 1 else throw new IllegalArgumentException("null")
} catch {
case e: IllegalArgumentException => println(e.getMessage)
case e: Exception => println(e.getMessage)
} finally {
println("finally")
}
try-catch-finally也有产生值,返回的结果是,如果没有异常抛出,则对应于try字句;如果抛出异常并被捕获,则对应与相应的catch字句。如果异常被抛出但没有被捕获,表达式就没有返回值。由finally字句计算得到的值,即使有也会被抛弃。
例如,如果函数有如下定义:
def f() : Int = try ( return 1 ) finally ( return 2 )
def g() : Int = try ( 1 ) finally ( 2 )
调用个f()会返回2,调用g()会返回1。
match表达式
Scala的match表达式类似与Java中的switch语句。val arg = "a"
arg match {
case "a" => println("a")
case "b" => println("b")
case _ => println("default")
}
Scala用”_”作为占位符表达位置值的通配符。每个case中并没有break,因为break是隐含的,即不允许从上一个case落入到下一个里面去。而且与Java的switch相比,match表达式还可以产生值。
val arg = "a"
val num =
arg match {
case "a" => 1
case "b" => 2
case _ => 0
}
Scala不再使用break和continue,需要用额外的变量做流程控制。