在kotlin中创建内联函数时,只应有内联的特定lambdas或参数

时间:2018-03-15 07:31:07

标签: kotlin

在使用inline函数时,kotlin将内联所有内容。就像在函数中传递的函数和参数或lambdas一样。 例如:

inline fun <T> myFun(getUserName: () -> String, getUserMobile: () -> String): T {
    // ...
}

以上示例中,getUserName()getUserMobile()都会内联,因为我们将myFun声明为内联函数。

根据kotlin doc:

  

内联修饰符会影响函数本身和lambdas   传递给它:所有这些都将被内联到呼叫站点。

问题是:

我们可以声明具有内联非内联参数的函数吗?

1 个答案:

答案 0 :(得分:1)

有时我们需要一些lambdas或参数来内联,不需要其他lambdas或参数作为内联工作。

为了避免内联,我们可以使用noinline修饰符。

示例:

inline fun <T> myFun(getUserName: () -> String, noinline getUserMobile: () -> String): T {
    // ...
}

根据Kotlin doc:

  

Inlinable lambdas只能在内联函数内部调用   作为无可辩驳的论点传递,但是可以操纵无内线的参数   我们喜欢的任何方式:存储在字段中,传递等等。

查看有关内联函数的更多信息: https://kotlinlang.org/docs/reference/inline-functions.html#inline-functions