当函数具有带 lambda 参数的对象时如何利用 kotlin 的内联优势
How to exploit kotlin's inline benefits when function has an object with a lambda parameter
假设我有这样的数据class
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
中的 lambda 参数未内联,这就是我想要内联功能的原因) ,如何让 kotlin 编译器在调用站点的模型 class 中内联 lambda 参数?
这不可能。作为 StubModel
的 属性,invocation
需要是一个对象实例并按此存储。这就是 inline 函数的目的是为了防止。也有一个列表作为参数使得不可能内联任何东西,因为编译器应该如何知道 runtime.
的值
假设我有这样的数据class
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
中的 lambda 参数未内联,这就是我想要内联功能的原因) ,如何让 kotlin 编译器在调用站点的模型 class 中内联 lambda 参数?
这不可能。作为 StubModel
的 属性,invocation
需要是一个对象实例并按此存储。这就是 inline 函数的目的是为了防止。也有一个列表作为参数使得不可能内联任何东西,因为编译器应该如何知道 runtime.