代码之家  ›  专栏  ›  技术社区  ›  David Aleksanyan

如何在Kotlin中调用在()scope{}外部声明的(samename)方法

  •  0
  • David Aleksanyan  · 技术社区  · 7 年前

    我想调用dada(),用()在外部声明 下面有一行应该做我需要的,但是没有编译。

    data class Person(val name: String, val age: Int)
    
    fun main(args: Array<String>) {
        var muchos = "muchos"
    
        fun dada(){
            println("dada")}
        var someRun = Runnable { println(muchos) }
    
        with(someRun){
            fun dada(){
                println("dodo")}
            run()
            muchos = "holas"
            //*********************//DOES'T COMPILE *******************
            this@OuterClass.dada() //DOES'T COMPILE *******************
            run()
    
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   yole    7 年前

    Kotlin没有提供一种语法来消除多个同名本地函数之间的歧义。这个 OuterClass this@OuterClass syntax是从中复制此行的示例中使用的特定类的名称;它没有“外部范围”的一般含义。

    为了使调用这两个函数成为可能,只需给它们取不同的名称。