kotlin - 如何在 Kotlin 中内联扩展函数的接收器参数?

标签 kotlin inline extension-function

灵感来自 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



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

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

有什么方法可以告诉编译器内联该接收器参数吗?

最佳答案

这是在 https://youtrack.jetbrains.com/issue/KT-5837 中跟踪的,但似乎并没有积极工作:( 我实际上 just suggested supporting noinline / crossinline 希望这是接收器没有内联的主要原因。

关于kotlin - 如何在 Kotlin 中内联扩展函数的接收器参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52057967/

相关文章:

android - onKeyEvent 修饰符在 Jetpack Compose 中不起作用

kotlin - 当作为参数传递时,属性引用 (::test) 是否等效于访问属性 ({ test }) 的函数,例如 `() -> String` ?

css - 背景图像拉伸(stretch)的内联样式

kotlin - 通用接口(interface)的扩展函数

kotlin - 在 Kotlin 中访问函数的默认参数值

android - 为什么尝试更改 TextView 或在 timerTask 中显示 toast 会卡住我的应用程序?

c++ - 对于内联函数和 constexpr 函数, "obey ODR"是什么意思?

c++ - 使用内联链接在定义冲突时生成错误

android - SharedPreference 值的 Kotlin 扩展字段(按字符串常量键)

kotlin - 如何在内部定义带有sharedPreferences的顶级功能?