部分適用された関数(partially applied functions)
部分適用された関数
Scala、私にとっては、この辺からだんだん難しくなってくる。 「複数の引数がある場合に、あらかじめ引数の値を決めておき、あとから決まってない引数だけ指定して関数を呼び出せる」、ということという理解である。 「デフォルト引数ありの関数のもっと便利版」という理解でもいいかも知れない。
s.foreach(x => println(x))
↓
s.foreach(println _)
上記の書き方を部分適用された関数(partially applied functions)と呼ぶ。 Scalaでは、必要な引数を渡して関数を呼び出すことを、”関数を引数に適用する”と考える(らしい)。 例えば
def sum(a:Int, b:Int, c:Int) = a + b + c sum(1,2,3) res1: Int = 6
と呼び出せる。
val a = sum _ a(1,2,3) res2: Int = 6
でも同じ結果になる。
val a = sum _
と書くと、コンパイラが、
sumにapply(a:Int, b:Int, c:Int)
を自動生成してくれる。 例えば、第1引数だけ決まってない、第2、第3引数は決まっている場合は以下のように書ける
val a = sum(_,2,3) a(1) res3: Int = 6 val b = sum(_,2,_) b(1,3) res4: Int = 6 val c = sum(_,_,_) c(1,2,3) res5: Int = 6
これが部分適用された関数である。 すべてコンパイラのせいだ。 パッとは思いつかなかったが、これって結構応用できる感じがする。 引数を予め決めておきたい処理って結構あるし、テンプレートエンジンで大量のコードを書くときにも利用できそう。 どこかで使ったら載せようと思う。
コップ本読んでる。
- 作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘
- 出版社/メーカー: インプレス
- 発売日: 2016/09/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る