如何将Result类型转换为有用的类型



我想要一个数字列表:

auto nums = iota(0, 5000);

现在nums属于Result类型。它不能强制转换为int[],也不能用作int[]的插入式替换。

从文档中还不太清楚如何实际使用iota作为范围。我用错函数了吗?在D中生成"范围"的方法是什么?

iota和火卫一中的许多函数一样,是惰性的。结果是承诺在您需要的时候给您所需要的东西,但还没有实际计算出价值。您可以将其传递给foreach语句,例如:

import std.range: iota;
foreach (i ; iota(0, 5000)) {
    writeln(i);
}

不过,你不需要它来进行简单的前臂:

foreach (i ; 0..5000) {
    writeln(i);
}

除此之外,希望iota本身是有用的。懒惰还可以实现无成本的转换链接:

/* values are computed only once in writeln */
iota(5).map!(x => x*3).writeln;
// [0, 3, 6, 9, 12]

如果您需要一个"真实"的值列表,请使用std.array中的array对其进行延迟:

int[] myArray = iota(0, 5000).array;

顺便提醒一下,单词range在D中有一个特定的含义,它不是"数字范围",而是描述一个迭代器模型,很像python中的生成器。iota是一个范围(因此是一个迭代器),它产生了一个数字范围(通用含义)。

最新更新