Kotlin Koans 19 Invoke

Invoke (Playground)

Description

Objects with invoke() method can be invoked as a function.

You can add invoke extension for any class, but it's better not to overuse it:

invoke() メソッドを持つオブジェクトは、関数として呼び出すことができます。

どのクラスにも invoke 拡張は追加することができますが、あまり使いすぎないことをおすすめします。

fun Int.invoke() { println(this) }

1() //huh?..

Implement the function Invokable.invoke() so it would count a number of invocations.

関数 Invokable.invoke() を実装し、関数の呼び出し回数をカウントするようにしてください。

Code

class Invokable {
var numberOfInvocations: Int = 0
private set
operator fun invoke(): Invokable {
numberOfInvocations++
return this
}
}

fun invokeTwice(invokable: Invokable) = invokable()()

Memo

invokable()()
// invokeは省略できる。省略しない場合
invokable.invoke().invoke()

← Blog