yield
昨天的範例都是對遍歷的值進行操作,用完就忘了它們。
如果要記住每次遍歷完的值就可以使用yield
用法:
for clause yield body
舉個例子:
val num = Array(1, 2, 3, 4)
for ( i <- num if i < 4) yield i
num: Array[Int] = Array(1, 2, 3)
Scala的例外處理就跟其他語言類似
除了回傳某個值之外,方法(method)可以透過拋出例外來終止程式。
拋出例外的方式跟Java一樣,建立一個物件並以關鍵字throw
拋出
throw new IllegalArgumentException
舉例:
val num =
if ( b != 0) a/b
else
throw new ArithmeticException
try {
val f = new FileReader("input.txt")
}
catch {
case ex: FileNotFoundException => //handling missing file
case ex: IOException => //handling I/O error
}
首先try內的程式會先執行過,如果拋出例外的話再依序執行catch裡的程式。
在這個例子裡,如果例外的類型是FileNotFoundExceptions,那第一個case會被執行;如果例外的類型是IOExceptions,那第二個case會被執行。
把那些無論有沒有拋出例外都要執行的code放在Finally裡面
import java.io.FileReader
val file = new FileReader("input.txt")
try {
//使用file
}
finally {
file.close //確保有關閉file
}
Scala裡的match運算式就相當於Java裡的switch
val i = readInt //使用者輸入
i match
case 0 => println("0")
case 1 => println("1")
//default match:如果i不是0也不是1就會輸出這行
case other => println(s"$other")
上面的程式範例讓使用者輸入一個數字,match
運算式會檢查這個數是0還是1或者都不是,再接著輸出相對應的輸出選項
如果沒有提供default match的話,有時會造成MatchError
那今天先介紹到這邊 明天繼續!