Как создать список объектов определенного класса в Dart? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть этот код в Python 3.x:

_VectorOf = lambda ownerObj,classType,scope: [classType(ownerObj) for i in scope]

Этот код создает список объектов "classType". "ClassType" - это любой класс, переданный пользователем.

Как бы это было в Dart 2.7.x? sh Я не буду использовать "dart: mirrors", если это возможно.

Заранее спасибо.

1 Ответ

2 голосов
/ 22 февраля 2020
List<T> vectorOf<T>(int length, T createObject()) => 
    [for (var i = 0; i < length; i++) createObject()];

Если вы хотите создать объект, вы должны сказать, как его создать.

Типа недостаточно. может быть достаточно с dart:mirrors, но только если тип действительно имеет конструктор. И это вообще тип класса, а не, скажем, тип функции или FutureOr<void> или что-то еще, что вообще не может иметь конструктор.

Примером может быть:

var listOfStringLists = vectorOf(12, () => <String>[]);

Это создает список длиной 12, где каждый элемент является новым пустым списком строк.

Если вам нужно параметризовать фабричную функцию с помощью дополнительного параметра, то вам просто нужно передать его вручную:

List<T> vectorOf<T, O>(int length, O owner, T createObject(O owner)) => 
    [for (var i = 0; i < length; i++) createObject(owner)];

Это передаст объект owner в качестве параметра factory каждый раз, когда он вызывается. Другой вариант:

List<T> vectorOf<T, O>(int length, O owner, T createObject(O owner)) =>
    List<T>.generate(length, (_) => createObject(owner));

, где вы используете конструктор List.generate, но игнорируете индекс, который он передает своей фабричной функции.

...