【问题标题】:How do I turn the Result type into something useful?如何将 Result 类型变成有用的东西?
【发布时间】:2016-03-23 13:16:24
【问题描述】:

我想要一个数字列表:

auto nums = iota(0, 5000);

现在nums 的类型为Result。它不能转换为int[],也不能用作int[] 的直接替代品。

the docs 并不清楚如何实际使用 iota 作为范围。我使用了错误的功能吗? D中“范围”的制作方法是什么?

【问题讨论】:

    标签: range d


    【解决方案1】:

    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]
    

    如果您需要“真实”的值列表,请使用 std.array 中的 array 对其进行去懒化:

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

    作为旁注,请注意,range 这个词在 D 中具有特定含义,它不是“数字范围”,而是描述了一个迭代器模型,很像 python 中的生成器。 iota 是一个范围(因此是一个迭代器),它产生了一个数字范围(一般含义)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      相关资源
      最近更新 更多