You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何定义并调用带上下文的高阶函数?

如何定义带上下文的高阶函数

针对你给出的Kotlin代码示例,要让上下文成为f的接收器,有两种可行的解决方案,具体如下:

方案一:使用上下文接收器函数类型

将参数f的类型从MyContext.() -> Unit改为context(MyContext) () -> Unit,外层函数的MyContext上下文会自动传递给f,直接调用f()即可生效:

interface MyContext {
    fun herp()
}

context(MyContext)
fun contextualizedHigherOrderFunction(f: context(MyContext) () -> Unit) {
    f() // 正常调用,上下文自动传递
}

这种方式让高阶函数的参数f与外层函数共享同一个MyContext实例,上下文依赖关系更紧密。

方案二:明确指定扩展函数的接收器实例

如果需要保留f为MyContext.() -> Unit(扩展函数类型),可以通过this@MyContext获取当前函数上下文里的MyContext实例,以此作为接收器调用f:

interface MyContext {
    fun herp()
}

context(MyContext)
fun contextualizedHigherOrderFunction(f: MyContext.() -> Unit) {
    this@MyContext.f() // 明确使用当前上下文实例作为接收器
}

this@MyContext专门指代context(MyContext)提供的上下文实例,完美匹配扩展函数f的接收器要求。

两种方案的选择取决于实际需求:若希望f的上下文依赖与外层函数强绑定,优先方案一;若需要f作为独立扩展函数灵活使用,方案二更合适。

内容的提问来源于stack exchange,提问作者F. P. Freely

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:13:20