【问题标题】:How to call a toplevel function from a method or an extension function of the same signature?如何从相同签名的方法或扩展函数中调用顶级函数?
【发布时间】:2017-07-12 13:26:52
【问题描述】:

我使用 kotlin 1.1.2-2

我想从方法Mul2.plus100(Int):Int 调用顶级函数plus100(Int):Int。我尝试在以下代码中执行此操作,但实际上调用了 Mul2.plus100 本身。

class Mul2 {
    fun plus100(v: Int): Int = plus100(2 * v)
}

fun plus100(v: Int): Int = v + 100

fun main(args: Array<String>) {
    val v = Mul2()
    println(v.plus100(10)) // expected: "120", actual: StackOverflowError
}

有没有办法从Mul2.plus100访问plus100

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    你可以使用函数所在的包来引用它:

    package pckg
    
    fun plus100(v: Int): Int = v + 100
    
    class Mul2 {
        fun plus100(v: Int): Int = pckg.plus100(2 * v)
    }
    

    您还可以使用 import as 重命名函数 - 如果它来自另一个文件或包,这更有意义,但也适用于单个文件:

    package pckg
    
    import pckg.plus100 as p100
    
    fun plus100(v: Int): Int = v + 100
    
    class Mul2 {
        fun plus100(v: Int): Int = p100(2 * v)
    }
    

    【讨论】:

    • 首先,投票。还有另一种方法可以使用变量引用函数。例如:val plus = ::plus100
    • 如果包是全局(空),我怀疑第一种方法不适用?
    猜你喜欢
    • 2020-06-16
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2017-09-27
    • 2010-09-19
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多