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) - >布尔值无关紧要 . 内联最适用于具有函数类型参数的函数

这让我相信编译器没有内联该函数的接收器 . 添加 inlinecrossinline 仅产生语法错误 .

无法内联第二个函数会降低第一个函数的性能 .

有没有办法告诉编译器内联接收器参数?