受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
;但是,我得到以下警告:
警告:内联公共内联操作员乐趣的预期性能影响<T>((T) - >布尔值).not():( T) - >布尔值无关紧要 . 内联最适用于具有函数类型参数的函数
这让我相信编译器没有内联该函数的接收器 . 添加 inline
或 crossinline
仅产生语法错误 .
无法内联第二个函数会降低第一个函数的性能 .
有没有办法告诉编译器内联接收器参数?