我在Python 3.x中有此代码:
_VectorOf = lambda ownerObj,classType,scope: [classType(ownerObj) for i in scope]
此代码创建“ classType”对象的列表。“ classType”是用户传递的任何类。
在Dart 2.7.x中会如何?如果可能的话,我不希望使用“ dart:mirrors”。
提前感谢。
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
构造函数的位置,但是忽略了传递给其工厂函数的索引。