fun main() {
    fun evenFn(num: Int): Boolean {
        return num % 2 == 0
    }
    val evenFn = fun(num: Int) = num % 2 == 0
    val list = listOf(1, 2, 3, 4, 5, 6)
    println(list.filter(evenFn))
    println(list.filter { evenFn(it) })
}

如何声明两个具有相同名称的evenFns(一个存储在变量中,另一个刚刚定义),我必须以不同的方式调用它们?在JavaScript中,这样做会引发错误,指出已经有一个evenFn

有人可以解释为什么编译器将两个evenFns区别对待吗?

最佳答案

fun evenFn是一种方法; val evenFn是一个碰巧具有函数类型的局部变量。在Kotlin(以及Java,C#等)中,允许在范围内具有相同名称的方法和局部变量,并且局部变量的类型不影响这些规则。

07-24 14:04