首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin dsl for Mutablelist add

Kotlin dsl for Mutablelist add
EN

Stack Overflow用户
提问于 2019-06-10 13:19:42
回答 1查看 138关注 0票数 0

下面是一个我想用来向mutableList添加更多元素的可扩展函数。

代码语言:javascript
复制
fun MutableList<Field>.withFields(block: () -> Field): MutableList<Field> {
    this.add(block())
    return this
}

下面是我如何使用该函数

代码语言:javascript
复制
fun dummy(): MutableList<Field> {
        return mutableListOf<Field>().withFields {
            Field("first")
            Field("second")
            Field("last")
        }
    }

只有最后一项被添加到列表中并返回。我该如何实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2019-06-10 13:29:57

您已经将withFields()扩展函数定义为接受一个返回单个Field对象的函数。该方法调用此函数,然后将其返回的对象添加到基础列表中。

然后调用withFields(),提供一个lambda函数。lambda函数的返回值的定义是函数中包含多个语句的块的最后一个语句的值。因此,您的lambda函数只返回Field("last"),因为这是函数中最后一条语句的结果。您创建的其他Field对象将被忽略。这就是为什么只将最终值添加到目标列表中的原因。

为了能够通过某个函数一次添加多个项,您需要定义这样一个函数,该函数可以通过返回迭代器或列表来返回多个项为added...like。

更新:所以可能是这样的(我没有尝试运行它):

代码语言:javascript
复制
fun MutableList<Field>.withFields(block: () -> List<Field>): MutableList<Field> {
    for (field in block()) {
        this.add(field)
    }
    return this
}

fun dummy(): MutableList<Field> {
    return mutableListOf<Field>().withFields {
        listOf( Field("first"),
                Field("second"),
                Field("last"))
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56520856

复制
相关文章

相似问题

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