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

标签 java function kotlin lambda

在我正在审查的一些培训中,我不完全理解示例高阶函数和 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()
  }
})

其中将 lambda 包含在 myWith 的正常参数列表中

最佳答案

在 Kotlin 中,有一个约定,如果函数的最后一个参数接受一个函数,则可以将作为相应参数传递的 lambda 表达式放在括号之外。

来源:https://kotlinlang.org/docs/reference/lambdas.html#passing-a-lambda-to-the-last-parameter

关于java - 对于 Kotlin 中的高阶函数,为什么 lambda 会显示在其他函数参数之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56365458/

相关文章:

c - 获取用户信息函数

function - Scala 方法 = trait { ... } 含义

kotlin - 如何解析 ktor 中发布的原始 json 数据列表

android - 如何在 Kotlin 多平台项目的 iOS 模块中将字符串转换为字节数组?

java - 最大单次卖出利润算法的最优解

java - 单例中的线程安全

Python: TypeError: 'function' 对象没有属性 '__getitem__'

java - 仅当收到匹配的 int 标志时才更新某些值

java - 线程执行 run() 方法两次

java - 更新半连续变量的下限不再使其保持半连续