Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于Kotlin中的高阶函数,为什么lambda显示在其他函数参数之外?_Java_Function_Kotlin_Lambda - Fatal编程技术网

Java 对于Kotlin中的高阶函数,为什么lambda显示在其他函数参数之外?

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

在我复习的一些培训中,我不太清楚示例高阶函数和lambda是如何通过语法连接起来的

这个高阶Kotlin函数

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等语言。