gpt4 book ai didi

kotlin - 如何在内部类上调用函数

转载 作者:行者123 更新时间:2023-12-02 13:08:50 25 4
gpt4 key购买 nike

以下代码发布在Kotlin的网站上:

class A { // implicit label @A
inner class B { // implicit label @B
fun Int.foo() { // implicit label @foo
val a = this@A // A's this
val b = this@B // B's this

val c = this // foo()'s receiver, an Int
val c1 = this@foo // foo()'s receiver, an Int

val funLit = lambda@ fun String.() {
val d = this // funLit's receiver
}


val funLit2 = { s: String ->
// foo()'s receiver, since enclosing lambda expression
// doesn't have any receiver
val d1 = this
}
}
}
}

我不清楚您如何在内部类中调用函数。例如,如何调用Int.foo()
var a = A()
a.Int.foo() // This is not allowed.

最佳答案

让我们看一个更简单的例子:

class A { 

inner class B {

fun foo() {
// ...
}
}
}

要在内部类中调用函数,必须使用外部类的实例访问它,如下所示:
A().B().foo()

使您的示例更加困难的是 Int.foo()是扩展功能,因此要访问它,您必须在与扩展功能相同范围内的 foo()上调用 Int:
class A { // outer class A
inner class B { // inner class B
fun Int.foo() { // entension function foo
print("Foo called on integer $this")
}

fun caller(i: Int) { // calls extension function
i.foo()
}
}
}

fun main() {
A().B().caller(10) // calls extension function in inner class B
}

在这里,我们添加了一个函数 caller,它与扩展函数的作用域相同。该代码输出以下内容:
Foo called on integer 10

关于kotlin - 如何在内部类上调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53390306/

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