문제

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

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

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

1() //huh?..

Implement the function Invokable.invoke() to count the number of times it is invoked.

class Invokable {
    var numberOfInvocations: Int = 0
        private set

    operator fun invoke(): Invokable {
        TODO()
    }
}

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

class Invokable {
    var numberOfInvocations: Int = 0
        private set

    operator fun invoke(): Invokable {
        numberOfInvocations++
        return this
    }
}

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

풀이

객체가 함수처럼 호출될 때마다 호출 횟수를 세는 문제이다.

invoke 함수가 호출 될 때마다 numberOfInvocations 변수 값을 증가 시켜야 되기 때문에 값을 1씩 증가시켜주고 객체 자신(this)을 반환시켜주면 된다.

참고

private set 은 setter 접근자를 private으로 설정하는 것을 의미한다. 즉, 값 읽기만 가능하고 수정할 수 없게 만드는 것이다.

profile
개발하는 다람쥐

0개의 댓글