Local Function访问具有相同名称的父变量

时间:2017-09-03 14:47:07

标签: android kotlin

这更像是我在kotlin上发表的好奇心问题

我使用的是本地函数,它的父参数名称与参数名称相同。

看看这个例子:

fun outerFunction(a: Int, b:Int) {

    fun localFunction(a: Int) {
        print(a) //local a
        print(b) //parent b
        print(???) //parent a?
    }

}

在本地函数内部,我打印本地a,父b,有没有办法打印父a?

1 个答案:

答案 0 :(得分:0)

bytecode的角度来看,这是可能的,因为outerFunction的变量只是localFunction的内部类中的字段(在字节码中),他们是可以访问的。

// decompiled localFunction
implements Function1<Integer, Unit> {
    final /* synthetic */ int $b;

    public final void invoke(int a) {
        System.out.print(a);
        int n = this.$b;
        System.out.print(n);
    }
    ...
}

幸运的是,kotlin并不支持这一点,因为这会给程序员带来歧义并容易出错。

因此,请避免对已在外部范围

中使用的变量使用相同的名称