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)}
とかけないのだろう.