Как использовать встроенные преимущества kotlin, когда функция имеет объект с лямбда-параметром

скажем, у меня есть такой класс данных

private data class StubModel<T>(
        val invocation: ItemsFactory.() -> T?,
        val returnValue: T
)

и у меня есть такая функция

private fun <T> stubIt(stubs: List<StubModel<T>>) {
    for (stub in stubs) {
        whenever(stub.invocation()).thenReturn(stub.returnValue)
    }
}

теперь, когда я пытаюсь встроить функцию stubIt, я не получаю никаких преимуществ в производительности (т.е. параметр лямбда в StubModel не встроен, поэтому мне нужна мощность встроенного), как мне заставить компилятор kotlin встроить параметр лямбда в класс модели на месте вызова?


person Bhargav    schedule 01.07.2018    source источник


Ответы (1)


Это не невозможно. Как свойство вашего StubModel, invocation должен быть экземпляром объекта и храниться как таковой. Это как раз то, для предотвращения чего предназначены встроенные функции. Кроме того, наличие списка в качестве параметра делает невозможным встраивание чего-либо, потому что откуда компилятору знать о значениях во время runtime.

person tynn    schedule 01.07.2018