1

如果我在 B 类中声明了 A 类型的扩展函数:

class A

class B {
    fun A.foo() = "Hello"
}

我可以从 B 类之外的代码中调用这个函数吗?

val a = A()
val b = B()
a.foo()      // error: unresolved reference: foo
b.foo()      // error: unresolved reference: foo
4

2 回答 2

3

是的:

with(b) { 
    a.foo() 
} 

接受带有B接收器的 lambda 的其他函数也可以工作。

于 2019-03-21T18:50:55.660 回答
0

不,当您在 B 中定义 A.foo 时,您已经有效地将函数范围限定为类。但是,您总是可以将它移到课堂之外......函数也可以是顶级的:)

于 2019-03-21T14:33:16.543 回答