1. ホーム
  2. コトリン

[解決済み】Kotlin:関数を他の関数にパラメータとして渡すには?

2022-04-03 09:42:38

質問

与えられた関数foo 。

fun foo(m: String, bar: (m: String) -> Unit) {
    bar(m)
}

できるのです。

foo("a message", { println("this is a message: $it") } )
//or 
foo("a message")  { println("this is a message: $it") }

さて、次のような関数があるとしよう。

fun buz(m: String) {
   println("another message: $m")
}

fooにパラメータとしてbuzを渡す方法はありますか? みたいな感じ。

foo("a message", buz)

解決方法は?

使用方法 :: で関数参照を意味し、次に

fun foo(msg: String, bar: (input: String) -> Unit) {
    bar(msg)
}

// my function to pass into the other
fun buz(input: String) {
    println("another message: $input")
}

// someone passing buz into foo
fun something() {
    foo("hi", ::buz)
}

Kotlin 1.1以降 では、クラスのメンバである関数を使用できるようになりました(" 呼び出し可能な参照の束縛 ")、関数参照演算子の前にインスタンスを付けることです。

foo("hi", OtherClass()::buz)

foo("hi", thatOtherThing::buz)

foo("hi", this::buz)