【问题标题】:How to exploit kotlin's inline benefits when function has an object with a lambda parameter当函数具有带有 lambda 参数的对象时如何利用 kotlin 的内联优势
【发布时间】:2018-07-01 07:03:14
【问题描述】:

假设我有一个这样的数据类

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编译器在调用站点的模型类中内联 lambda 参数?

【问题讨论】:

    标签: lambda kotlin inline-functions


    【解决方案1】:

    这是不可能的。作为StubModel 的属性,invocation 需要是对象实例并按原样存储。这正是 inline 函数旨在防止的。还有一个列表作为参数使得内联任何东西都变得不可能,因为编译器应该如何知道 runtime 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多