インタプリタ上で関数をデフォルト引数として与えるには?
kotlinのコマンドラインインタプリタ(kotlinc-jvm 1.1.2-2)上で、まず関数id
を定義し、
>>> fun id(x: Int) = x
次に関数applyTo10
を定義しようとしたところエラーが出ました。
>>> fun applyTo10(f: (Int) -> Int = ::id) = f(10)
error: left-hand side of a callable reference with a receiver parameter cannot be empty. Please specify the type of the receiver before '::' explicitly
fun applyTo10(f: (Int) -> Int = ::id) = f(10)
エラーメッセージに従えばレシーバの型を指定してやれば良さそうですが、この場合のレシーバの型が何なのか分かりません。
ところで関数参照の代わりにラムダ式を与える場合はエラーになりません。
>>> fun applyTo10(f: (Int) -> Int = { it }) = f(10)
>>> applyTo10()
10
デフォルト引数の関数を名前(この場合はid
)で指定するにはどうすればよいでしょうか?
追記
妥協案としてはラムダ式の中で名前を使って
fun applyTo10(f: (Int) -> Int = { id(it) }) = f(10)
とする等。