在gradle-kotlin-dsl中...这是有效代码
tasks {
"build" {
// inner lambda code here字符串可以接受lambda参数是如何工作的,或者这种语法是如何工作的?字符串"build“似乎是替换函数调用的字符串列表中的一个?在适用的类定义中必须设置此行为,但我不知道如何做到这一点。
这种工作方式可能是一种有其他用途的技术,但要评估它,有必要知道它是如何工作的!
发布于 2018-10-25 13:10:01
这是两个经常用于创建DSLs的Kotlin语言功能的组合,具体地说:
invoke运算符,它允许您为一个类型定义()函数调用运算符,它具有一个任意参数列表(docs)
要实现您特别询问的语法,您可以编写如下方法:
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调用的String,并且您将拥有传递给它的lambda。
为了进一步参考,here's是一篇多部分的文章,展示了一些数字用户线构建技术。
https://stackoverflow.com/questions/52979206
复制相似问题