灵感来自 this question ,我在想如何内联扩展函数的接收器参数?理论上,像这样:
inline fun <T> not(crossinline predicate : (T) -> Boolean)
= { e : T -> !predicate(e) }
就是这样
predicate
成为我们的接收器函数:operator inline fun <T> ((T) -> Boolean).not()
= { e : T -> !this(e) }
现在,对于上面的代码,我希望编译器提示它需要
crossinline
;但是,我收到以下警告:Warning: Expected performance impact of inlining
public inline operator fun <T> ((T) -> Boolean).not(): (T) -> Boolean
is insignificant. Inlining works best for functions with parameters of functional types
这让我相信编译器没有内联该函数的接收器。添加
inline
或 crossinline
只会产生语法错误。无法内联第二个函数会降低第一个函数的性能。
有什么方法可以告诉编译器内联该接收器参数吗?
最佳答案
这是在 https://youtrack.jetbrains.com/issue/KT-5837 中跟踪的,但似乎并没有积极工作:( 我实际上 just suggested supporting noinline
/ crossinline
希望这是接收器没有内联的主要原因。
关于kotlin - 如何在 Kotlin 中内联扩展函数的接收器参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52057967/