如何将结果类型变成有用的东西?
How do I turn the Result type into something useful?
我想要一个数字列表:
auto nums = iota(0, 5000);
现在 nums
的类型是 Result
。它不能转换为 int[]
,也不能用作 int[]
.
的直接替代品
从 the docs 中不太清楚如何实际使用 iota
作为范围。我使用了错误的功能吗? "range"在D有什么方法?
iota
,和Phobos的很多功能一样,是惰性的。结果是一个承诺,在你需要的时候给你你需要的东西,但实际上还没有计算出任何值。您可以将其传递给 foreach
语句,例如:
import std.range: iota;
foreach (i ; iota(0, 5000)) {
writeln(i);
}
虽然简单的 foreach 不需要它:
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]
如果您需要 "real" 值列表,请使用 std.array
中的 array
对其进行去模糊化处理:
int[] myArray = iota(0, 5000).array;
作为旁注,请注意 range
这个词在 D 中有一个特定的含义,它不是 "range of numbers" 但描述了一个迭代器模型,很像 python 中的生成器. iota
是一个范围(因此是一个迭代器),它产生了一个数字范围(通常的含义)。
我想要一个数字列表:
auto nums = iota(0, 5000);
现在 nums
的类型是 Result
。它不能转换为 int[]
,也不能用作 int[]
.
从 the docs 中不太清楚如何实际使用 iota
作为范围。我使用了错误的功能吗? "range"在D有什么方法?
iota
,和Phobos的很多功能一样,是惰性的。结果是一个承诺,在你需要的时候给你你需要的东西,但实际上还没有计算出任何值。您可以将其传递给 foreach
语句,例如:
import std.range: iota;
foreach (i ; iota(0, 5000)) {
writeln(i);
}
虽然简单的 foreach 不需要它:
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]
如果您需要 "real" 值列表,请使用 std.array
中的 array
对其进行去模糊化处理:
int[] myArray = iota(0, 5000).array;
作为旁注,请注意 range
这个词在 D 中有一个特定的含义,它不是 "range of numbers" 但描述了一个迭代器模型,很像 python 中的生成器. iota
是一个范围(因此是一个迭代器),它产生了一个数字范围(通常的含义)。