gpt4 book ai didi

kotlin - 在 Kotlin 中,如何绑定(bind)扩展方法以在接收者作用域函数中工作

转载 作者:行者123 更新时间:2023-12-05 05:32:24 25 4
gpt4 key购买 nike

这感觉有点不一致,因为它适用于独立函数,但不适用于类/接口(interface)方法:

class TestClass {
val foo = "bar"
}

fun testScope(scope: TestClass.() -> Any) {

val test = TestClass()

scope(test)

}


// this works
fun TestClass.standaloneRunInTest() {
println(foo)
}

interface Example {

val name: String

// but this doesn't?
fun TestClass.interfaceRunInTest() {
println(foo + name)
}

object Instance: Example {
override val name: String = "Baz"
}

}


fun main() {

testScope {
standaloneRunInTest() // prints "bar"
Example.Instance.interfaceRunInTest() // expected to print "barbaz", but gets Unresolved reference: interfaceRunInTest
}

}

虽然我在做一些愚蠢的事情,但更有可能!

最佳答案

Example.Instance 不是 TestClass 的实例。您正在使用语法,就好像您正在尝试调用 interfaceRunInTest() 作为 Example.Instance 的函数,这是行不通的。

要调用在类型范围内定义的扩展函数,您必须将两种类型都作为接收者引入范围,例如:

testScope {
Example.Instance.run { interfaceRunInTest() }
}

// or
Example.Instance.run {
testScope {
interfaceRunInTest()
}
}

runwith 范围函数可用于此目的。

关于kotlin - 在 Kotlin 中,如何绑定(bind)扩展方法以在接收者作用域函数中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74132924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com