在使用inline
函数时,kotlin将内联所有内容。就像在函数中传递的函数和参数或lambdas一样。
例如:
inline fun <T> myFun(getUserName: () -> String, getUserMobile: () -> String): T {
// ...
}
以上示例中,getUserName()
和getUserMobile()
都会内联,因为我们将myFun
声明为内联函数。
根据kotlin doc:
内联修饰符会影响函数本身和lambdas 传递给它:所有这些都将被内联到呼叫站点。
问题是:
我们可以声明具有内联和非内联参数的函数吗?
答案 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