如何从同一签名的方法或扩展函数调用顶级函数?

let*_*rec 5 kotlin

我用kotlin 1.1.2-2

我想plus100(Int):Int从方法调用顶级函数Mul2.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
}
Run Code Online (Sandbox Code Playgroud)

反正有访问plus100Mul2.plus100

zsm*_*b13 8

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

package pckg

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

class Mul2 {
    fun plus100(v: Int): Int = pckg.plus100(2 * v)
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用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)
}
Run Code Online (Sandbox Code Playgroud)

  • 首先,投票.还有另一种方法可以使用变量ref a function.eg:`val plus = :: plus100` (2认同)