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

cat*_*cat 4 d range

我想要一个数字列表:

auto nums = iota(0, 5000);
Run Code Online (Sandbox Code Playgroud)

现在nums是类型Result.它不能被强制转换int[],也不能用作替代品int[].

文档中不太清楚如何实际使用iota作为范围.我使用了错误的功能吗?在D中制作"范围"的方法是什么?

cym*_*m13 11

iota就像Phobos中的许多功能一样,是懒惰的.结果是承诺在您需要时为您提供所需的内容,但实际上尚未计算任何值.您可以将其传递给foreach语句,例如:

import std.range: iota;
foreach (i ; iota(0, 5000)) {
    writeln(i);
}
Run Code Online (Sandbox Code Playgroud)

你不需要它来做一个简单的foreach:

foreach (i ; 0..5000) {
    writeln(i);
}
Run Code Online (Sandbox Code Playgroud)

除此之外,有希望明确的iota是它本身是有用的.懒惰也允许无成本链接转换:

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

如果您需要一个"真实"值列表,请使用arrayfrom std.array来对其进行解密:

int[] myArray = iota(0, 5000).array;
Run Code Online (Sandbox Code Playgroud)

作为旁注,请注意该单词range在D中具有特定含义,而不是"数字范围",但描述的迭代器模型与python中的生成器非常相似.iota是一个范围(所以迭代器)产生数字的范围(通用含义).