Kotlin KoansでKotlin入門 第18回:Invoke
6023 ワード
はじめに
公式の問題集「Kotlin Koans」を解きながらKotlinを学習します。
過去記事はこちら
- Introduction
- Classes
- Conventions
問題
invoke()メソッドを持つオブジェクトは、関数として呼び出すことができます。
どのクラスでも invoke 拡張を追加することができますが、使いすぎないようにしたほうがよいでしょう。
operator fun Int.invoke() { println(this) }
1() //huh?..
Invokable.invoke()という関数を実装して、呼び出された回数をカウントするようにしましょう。
修正前のコード
class Invokable {
var numberOfInvocations: Int = 0
private set
operator fun invoke(): Invokable {
TODO()
}
}
fun invokeTwice(invokable: Invokable) = invokable()()
問題のポイント
operator overloadingのつづきでinvoke operatorを使います。
括弧だけでinvokeメソッドを呼び出すことができます。
解答例
class Invokable {
var numberOfInvocations: Int = 0
private set
operator fun invoke(): Invokable {
numberOfInvocations += 1
return this
}
}
fun invokeTwice(invokable: Invokable) = invokable()()
class Invokable {
var numberOfInvocations: Int = 0
private set
operator fun invoke(): Invokable {
numberOfInvocations += 1
return this
}
}
fun invokeTwice(invokable: Invokable) = invokable()()
Author And Source
この問題について(Kotlin KoansでKotlin入門 第18回:Invoke), 我々は、より多くの情報をここで見つけました https://qiita.com/kosuke1/items/7879f83341d169374eb3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .