这是我想在向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")
}
}
仅将最后一项添加到列表中并返回。 我该如何实现?
答案 0 :(得分:0)
您已将withFields()扩展函数定义为采用返回单个Field对象的函数。该方法调用此函数,然后将它返回的对象添加到基础列表中。
然后您调用withFields(),提供一个lambda函数。对于具有多个语句的块,lambda函数的返回值的定义是该函数中最终语句的值。因此,您的lambda函数仅返回Field("last")
,因为那是该函数中最后一条语句的结果。您创建的其他Field对象将被忽略。这就是为什么仅将最终值添加到目标列表的原因。
要能够通过某个函数一次添加多个项目,您需要定义一个这样的函数,该函数可以返回要添加的多个项目……就像通过返回Iterator或List一样。
更新:所以也许是这样(没有尝试运行):
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"))
}
}