受这个问题的启发,我在想如何内联扩展函数的接收器参数?理论上是这样的:
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
;但是,我收到以下警告:
警告:内联的预期性能影响
public inline operator fun <T> ((T) -> Boolean).not(): (T) -> Boolean
是微不足道的。内联最适合具有函数类型参数的函数
这让我相信编译器没有内联该函数的接收器。添加inline
orcrossinline
只产生语法错误。
无法内联第二个函数会降低第一个函数的性能。
有没有办法告诉编译器内联该接收器参数?