Kotlin从函数引用全局变量

时间:2018-08-01 05:41:40

标签: kotlin

这是我的代码

var offset=0 //Global offset
fun foo(){
    bar(offset)
}

fun bar(offset:Int){//Function argument offset
    .......
    .......
    .......
    if(baz()){
        .......
        .......
        offset+=10 // I want to update the global offset, but function argument offset is reffered here
        bar(offset)
    }
}

fun baz():Boolean{
    .......
    .......
}

如何在功能栏(offset:Int)中引用全局变量“ offset”? 在科特林不可能吗?

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以通过在文件级别变量前加上包名称来引用它:

package x

var offset = 0 // Global offset

fun bar(offset: Int) { // Function argument offset
    x.offset += 10 // Global offset
}

fun main(args: Array<String>) {
    bar(5)
    println(offset) // Global offset
}

答案 1 :(得分:1)

在kotlin中,函数参数是不可变的(是val,不是var!),因此,您无法在bar函数内部更新offset参数。

最后,如果将这些代码放在类中,则可以通过'this'关键字访问与函数参数名称相同的类中的全局变量,如下所示:

class myClass{
    var offset=0 //Global offset
    fun foo(){
        bar(offset)
    }

    fun bar(offset:Int){//Function argument offset
        .......
        if(baz()){
            .......
            this.offset+=10 // I want to update the global offset, but function argument offset is reffered here
            .......
        }
    }

    fun baz():Boolean{
        .......
    }
}