在kotlin lambda中,字符串如何接受lambda?
在gradle kotlin dsl中。。。这是有效代码在kotlin lambda中,字符串如何接受lambda?,lambda,kotlin,gradle-kotlin-dsl,Lambda,Kotlin,Gradle Kotlin Dsl,在gradle kotlin dsl中。。。这是有效代码 tasks { "build" { // inner lambda code here 一个字符串可以接受lambda参数,或者这个语法是如何工作的?字符串“build”似乎是替代函数调用的字符串列表之一? 适用类定义中的某些内容必须设置这种行为,但我无法思考如何做到这一点 这种工作方式可能是一种有其他用途的技术,但要评估它,有必要知道它是如何工作的 这是两个Kotlin语言功能的组合,通常用于创建,具体来说: in
tasks {
"build" {
// inner lambda code here
一个字符串可以接受lambda参数,或者这个语法是如何工作的?字符串“build”似乎是替代函数调用的字符串列表之一?
适用类定义中的某些内容必须设置这种行为,但我无法思考如何做到这一点
这种工作方式可能是一种有其他用途的技术,但要评估它,有必要知道它是如何工作的 这是两个Kotlin语言功能的组合,通常用于创建,具体来说:
- invoke运算符,它允许您使用任意参数列表()为类型定义
函数调用运算符()
- 能够将最后一个lambda参数传递给参数列表()中通常需要的参数以外的函数
- 扩展,允许您向现有类型添加新方法,即使您不拥有这些方法()
operator fun String.invoke(block: () -> Unit) {
// Do whatever you'd like with the String and the lambda
// you received as a parameter
}
作为参数的lambda也可以是您想要的任何类型的扩展(可能是String
本身,但取决于您的用例),可以接受参数,或者期望返回值而不仅仅是Unit
关键是在这个扩展中,您可以访问字符串
,它被调用为this
,并且您将拥有传递给它的lambda
作为进一步参考,本文由多部分组成,展示了一些DSL构建技术。这是Kotlin语言功能的组合,通常用于创建,特别是:
- invoke运算符,它允许您使用任意参数列表()为类型定义
函数调用运算符()
- 能够将最后一个lambda参数传递给参数列表()中通常需要的参数以外的函数
- 扩展,允许您向现有类型添加新方法,即使您不拥有这些方法()
operator fun String.invoke(block: () -> Unit) {
// Do whatever you'd like with the String and the lambda
// you received as a parameter
}
作为参数的lambda也可以是您想要的任何类型的扩展(可能是String
本身,但取决于您的用例),可以接受参数,或者期望返回值而不仅仅是Unit
关键是在这个扩展中,您可以访问字符串
,它被调用为this
,并且您将拥有传递给它的lambda
为了进一步的参考,本文是一篇多部分的文章,展示了一些DSL构建技术