Вы определили функцию расширения withFields () как функцию, которая возвращает один объект Field. Метод вызывает эту функцию, а затем добавляет возвращаемый объект в базовый список.
Затем вы вызываете withFields (), предоставляя лямбда-функцию. Определение возвращаемого значения лямбда-функции - это значение конечного оператора в функции в случае блока с несколькими операторами. Таким образом, ваша лямбда-функция возвращает просто 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"))
}
}