如何在Dart中创建某些类类型的对象的列表?

问题描述 投票:0回答:1

我在Python 3.x中有此代码:

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

此代码创建“ classType”对象的列表。“ classType”是用户传递的任何类。

在Dart 2.7.x中会如何?如果可能的话,我不希望使用“ dart:mirrors”。

提前感谢。

python dart types anonymous-function anonymous-class
1个回答
2
投票
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构造函数的位置,但是忽略了传递给其工厂函数的索引。

© www.soinside.com 2019 - 2024. All rights reserved.