Kotlin:类内扩展

dr_*_*and 3 kotlin

我在类中有一个扩展函数

class Utils{
    private var x : Int = 0;

    public fun Utils.multiply() : Int{
        return this.x*100;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我可以在另一个扩展中使用扩展乘法

fun Utils.add() : Int{
    return this.multiply()+100
}
Run Code Online (Sandbox Code Playgroud)

但不能在Main类中使用

class Main{
    val utils = Utils()


    val multi = utils.multiply() //error : Unresolved reference
}
Run Code Online (Sandbox Code Playgroud)

cac*_*acs 13

当您在类中声明扩展函数时,它只能在类的作用域内访问。只是没有办法直接引用它(无论如何目前)。

您可以使用范围函数将自己置于该范围内:

val multi = utils.run { multiply() }
Run Code Online (Sandbox Code Playgroud)

但是您只能通过这种方式访问​​公共函数 - 如果扩展函数在该类中是私有的,则您必须实际在该函数可见的类中运行代码。做classWithPrivateStuff.run { superPrivateFunction() }不会绕过这些限制