初めてのscalaで戸惑ったことをつらつらと書く
"=>"ってなんやの
パターンマッチングとか、関数リテラルのパラメータを渡す的な場面でつかう。
"->"ってなんやの
つまるところ、2要素のタプルを作っているようだ。
↓みたいなコードってなんやの
db.use(param) {
con =>
hogehoge(con)
} openOr false
つまるところ、コネクションを確保して、{}で記述した関数リテラルで定義した関数にそいつを渡して処理させて、コネクション開放までやっちゃうよということらしい。で、そいつのooenOrメソッドを引数falseを渡して呼んでいる。db.use(param)は関数を受け取る関数を返す定義になっている。こんな感じ:
def use(param : String)(f : (Connection) => T)
カリー化とスペースによる単一引数渡しな記法を組み合わせて、結果的に構文ブロック的な見た目にしつつ、リソースリークを防いでいるようだ。これが一番混乱させ、なるほどと関心した部分。って、これがあの「ローンパターン」だわ。
というか、見ていたのはhttp://main.scala-tools.org/mvnsites/liftweb-2.1/framework/scaladocs/net/liftweb/mapper/DB$object.htmlの一番したにあるuseメソッドの定義と、それを利用しているhttp://main.scala-tools.org/mvnsites/liftweb-2.1/framework/scaladocs/net/liftweb/mapper/MetaMapper.scala.htmlの599行目"def delete_!"の実装部分です。
他いろいろやってたような気がするけど、ここ数日の苦労はLift2.1の機能を調べてたりすることがほとんどでした。巷のLift情報は1の頃のものが多く(公式サイト記載の情報でさえ)、参考にしつつAPIリファレンスから雰囲気を嗅ぎとって…という感じで、その苦労はもう少し続きそう。
「こんなんでよく導入を決めたな」と思うあなたは、たぶん正しい。