下面是一个我想用来向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")
}
}只有最后一项被添加到列表中并返回。我该如何实现这一点?
发布于 2019-06-10 13:29:57
您已经将withFields()扩展函数定义为接受一个返回单个Field对象的函数。该方法调用此函数,然后将其返回的对象添加到基础列表中。
然后调用withFields(),提供一个lambda函数。lambda函数的返回值的定义是函数中包含多个语句的块的最后一个语句的值。因此,您的lambda函数只返回Field("last"),因为这是函数中最后一条语句的结果。您创建的其他Field对象将被忽略。这就是为什么只将最终值添加到目标列表中的原因。
为了能够通过某个函数一次添加多个项,您需要定义这样一个函数,该函数可以通过返回迭代器或列表来返回多个项为added...like。
更新:所以可能是这样的(我没有尝试运行它):
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"))
}
}https://stackoverflow.com/questions/56520856
复制相似问题