try-catchはJavaとほぼ一緒。
でもcatch句でcase使ってるってことはパターンマッチングなのかな??
Snippet: Sum Arguments | The Scala Programming Language
package sample.snippet object TryCatchSample extends Application { var array = Array("1", "2", "3", "4") try { val elements = array map Integer.parseInt // foldRight returns f(a0, f(a1, f(..., f(an, z)...))) if the list is [a0, a1, ..., an]. println("The sum of my array is: " + elements.foldRight(0) ( (a, b) => { println("a:" + a) println("b:" + b) println("--") a + b } )) } catch { case e: NumberFormatException => println("The element of array need to be Int.") case e: RuntimeException => println("test") } }
「変数名: 型」で判定してる感じ?ちなみにeでなくてもaでも何でもいける。ただの名前だしね。
なんじゃこりゃって思ったのはむしろfoldRightメソッドの方で。
このシリーズの写経は実は完コピではなくて、僕が勝手にいろいろ試してます。
foldRightの動作を確かめるために、foldRightの引数に渡した関数の引数を出力しました。
コードの意味から合計を計算してるし、おそらく配列の回数分呼び出されてるはずなので。
実行結果。
a:4 b:0 -- a:3 b:4 -- a:2 b:7 -- a:1 b:9 -- The sum of my array is: 10
第2引数(b)には最初foldRightに渡した0が入ってる。
そして配列の要素と加算していくけど、次のループでは前回の合計が第2引数(b)に入ってる。
なるほど。