Function 为什么有两个函数做完全相同的事情?为什么在Kotlin中必须以不同的方式调用?
我怎么能用相同的名称声明两个Function 为什么有两个函数做完全相同的事情?为什么在Kotlin中必须以不同的方式调用?,function,kotlin,kotlin-function-type,Function,Kotlin,Kotlin Function Type,我怎么能用相同的名称声明两个evenfn(一个存储在变量中,另一个刚刚定义)并且我必须以不同的方式调用它们?在JavaScript中,这样做会抛出一个错误,表明已经存在一个evenFn 有人能解释一下为什么编译器对这两个事件处理不同吗?在Javascript中这样做不会引发错误。在Javascript中,函数被提升到作用域的顶部 如果您要编写如下代码: var test=function(){ console.log('a'); } 功能测试(){ console.log('b'); } te
evenfn
(一个存储在变量中,另一个刚刚定义)并且我必须以不同的方式调用它们?在JavaScript中,这样做会抛出一个错误,表明已经存在一个evenFn
有人能解释一下为什么编译器对这两个
事件处理不同吗?在Javascript中这样做不会引发错误。在Javascript中,函数被提升到作用域的顶部
如果您要编写如下代码:
var test=function(){
console.log('a');
}
功能测试(){
console.log('b');
}
test();
test.apply()代码>在阅读kotlin文档的函数类型部分后,我找到了答案。您需要对本地函数、成员函数的可调用引用,以便将它们作为引用传递。fn
是一种方法val evenFn
是一个局部变量,恰好具有函数类型。在Kotlin(以及Java和C#等)中,允许在作用域中具有相同名称的方法和局部变量,并且局部变量的类型不影响这些规则。,实际上会引发错误,因此您需要在第一条语句中删除var声明,因为您希望重新分配它,而不是重新声明它
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) })
}