Java 对于Kotlin中的高阶函数,为什么lambda显示在其他函数参数之外?
在我复习的一些培训中,我不太清楚示例高阶函数和lambda是如何通过语法连接起来的 这个高阶Kotlin函数Java 对于Kotlin中的高阶函数,为什么lambda显示在其他函数参数之外?,java,function,kotlin,lambda,Java,Function,Kotlin,Lambda,在我复习的一些培训中,我不太清楚示例高阶函数和lambda是如何通过语法连接起来的 这个高阶Kotlin函数 fun myWith(name: String, block: String.() -> Unit) { name.block() } 是这样调用的 myWith(fish.name) { capitalize() } 我知道第二部分是lambda,但我不明白为什么它没有作为函数的第二个参数包含,只是挂在参数之外。比如为什么它不能被调用为: myWith(fish.n
fun myWith(name: String, block: String.() -> Unit) {
name.block()
}
是这样调用的
myWith(fish.name) {
capitalize()
}
我知道第二部分是lambda,但我不明白为什么它没有作为函数的第二个参数包含,只是挂在参数之外。比如为什么它不能被调用为:
myWith(fish.name, { capitalize() } )
稍后,将对该示例进行更详细的描述,如下所示
myWith(fish.name, object : Function1<String, Unit> {
override fun invoke(name: String) {
name.capitalize()
}
})
myWith(fish.name,object:Function1{
覆盖乐趣调用(名称:字符串){
name.capitalize()
}
})
在Kotlin中将lambda包含在正常的参数列表中,以
myWith
,有一种约定,即如果函数的最后一个参数接受函数,则作为相应参数传递的lambda表达式可以放在括号外
来源:在Kotlin中,有一种约定,即如果函数的最后一个参数接受函数,则可以将作为相应参数传递的lambda表达式放在括号外
来源:Ugh,好的。似乎武断且前后矛盾,但我现在明白了。谢谢这个链接并没有解释为什么它是被允许的,这是一个AIUI,它允许类似于语言语法的高阶函数调用。例如,
repeat(10){/*…*/}
看起来类似于For
或while
循环。@gidds事实上,下面几行就描述了这一点:我不熟悉LINQ,但是我不认为那里的例子提供了像我这样强有力的例子:-)@GenerationTech这是一个常见的预先存在的习语,采用了Ruby和Groovy等语言。似乎武断且前后矛盾,但我现在明白了。谢谢这个链接并没有解释为什么它是被允许的,这是一个AIUI,它允许类似于语言语法的高阶函数调用。例如,repeat(10){/*…*/}
看起来类似于For
或while
循环。@gidds事实上,下面几行就描述了这一点:我不熟悉LINQ,但是我不认为那里的例子提供了像我这样强有力的例子:-)@GenerationTech这是一个常见的预先存在的习语,采用了Ruby和Groovy等语言。