0

这是我想在向 mutableList 添加更多元素时使用的可扩展函数。

fun MutableList<Field>.withFields(block: () -> Field): MutableList<Field> {
    this.add(block())
    return this
}

这是我如何使用该功能

fun dummy(): MutableList<Field> {
        return mutableListOf<Field>().withFields {
            Field("first")
            Field("second")
            Field("last")
        }
    }

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

4

1 回答 1

0

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

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

为了能够通过某个函数一次添加多个项目,您需要定义这样一个函数来返回要添加的多个项目……比如返回一个迭代器或一个列表。

更新:所以也许是这样的(没有尝试运行它):

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"))
    }
}
于 2019-06-10T05:29:56.930 回答