首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在kotlin lambda中,字符串如何接受lambda?

在kotlin lambda中,字符串如何接受lambda?
EN

Stack Overflow用户
提问于 2018-10-25 07:20:10
回答 1查看 103关注 0票数 0

在gradle-kotlin-dsl中...这是有效代码

代码语言:javascript
复制
tasks {
   "build" {
      // inner lambda code here

字符串可以接受lambda参数是如何工作的,或者这种语法是如何工作的?字符串"build“似乎是替换函数调用的字符串列表中的一个?在适用的类定义中必须设置此行为,但我不知道如何做到这一点。

这种工作方式可能是一种有其他用途的技术,但要评估它,有必要知道它是如何工作的!

EN

回答 1

Stack Overflow用户

发布于 2018-10-25 13:10:01

这是两个经常用于创建DSLs的Kotlin语言功能的组合,具体地说:

invoke运算符,它允许您为一个类型定义()函数调用运算符,它具有一个任意参数列表(docs)

  • being,它能够将最后一个lambda参数传递给参数列表(docs)

  • extensions,通常需要的范围之外的函数,从而允许您向现有类型添加新方法,即使您并不拥有它们(docs)

要实现您特别询问的语法,您可以编写如下方法:

代码语言:javascript
复制
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是一篇多部分的文章,展示了一些数字用户线构建技术。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52979206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档