KZKY memo

自分用メモ.

Scala: call-by nameの実行

関数リテラルを受けとる関数で,関数内で関数リテラルに引数を指定せずに,関数リテラルを実行する.

val a = 2
val b = 3
val n = 10

def func(n: Int, f: (Int, Int) => Int) = {n * f(_: Int, _:Int)}

プレイスホルダーを使う.

関数が返ってくるのでそれを呼ぶ.

func(n, (a, b) => {a * b})(a, b)

ポイントは,(a, b)という関数リテラルに入れたパラメータを関数リテラル実行時に指定できているということ.

なんで

def func(n: Int, f: (a: Int, b: Int) => Int) = {n * f(a, b)}

とかけないのだろう.