function - 为什么有两个函数执行完全相同的操作?为什么必须在 Kotlin 中以不同的方式调用?

标签 function kotlin kotlin-function-type

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# 等)中,允许在作用域内有一个同名的方法和局部变量,并且局部变量的类型不会影响这些规则。

关于function - 为什么有两个函数执行完全相同的操作?为什么必须在 Kotlin 中以不同的方式调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623857/

相关文章:

properties - 将静态变量从 Java 转换为 Kotlin

android - 尝试匹配微调器和文本字段的文本内容,但 'withText' 和 'withSpinnerText' 正在返回有关组件的数据

kotlin 将函数作为参数传递时类型不匹配,必需 : ()->Unit, 找到:单位

function - 为什么我的代码中的 String.() -> Unit 与 (String) -> Unit 相同?

javascript - 访问对象 key :Value Pair in Function

JavaScript setInterval 函数可能有参数,也可能没有参数

hibernate - JPQL 和元组列表作为 SELECT IN 语句的参数

c - 与 C99 驱动程序接口(interface)的问题

javascript - JS/HTML : Convert decimal user input to color and fill box with it