Iterable<E>.generate 构造函数
创建一个动态生成元素的 Iterable
。
生成的可迭代有 count
个元素,索引为 n
的元素通过调用 generator(n)
计算得出。值不会被缓存,因此每次迭代都会重新计算值。
如果省略 generator
,则默认为整数上的恒等函数 (int x) => x
,因此只有在类型参数允许整数值时才能省略。也就是说,如果 E
是 int 的超类型。
作为一个 Iterable
,Iterable.generate(n, generator))
等同于 const [0, ..., n - 1].map(generator)
。
实现
factory Iterable.generate(int count, [E generator(int index)?]) {
// Always OK to omit generator when count is zero.
if (count <= 0) return EmptyIterable<E>();
if (generator == null) {
// If generator is omitted, we generate integers.
// If `E` does not allow integers, it's an error.
Function id = _GeneratorIterable._id;
if (id is! E Function(int)) {
throw ArgumentError(
"Generator must be supplied or element type must allow integers",
"generator");
}
generator = id;
}
return _GeneratorIterable<E>(count, generator);
}