有人会说什么std.algorithm.map回报?(链接到一些文档页面将非常感激)从错误消息其结果是类型Result
ulong[] x = [1,2,3];
ulong[] y = std.algorithm.map!"a"(x); // Error: cannot implicitly convert <..> of type Result to ulong[]
Run Code Online (Sandbox Code Playgroud)
在http://dlang.org/phobos/std_algorithm.html#map中,关于它的信息非常少:
The call map!(fun)(range) returns a range of which elements are obtained by applying fun(x) left to right for all x in range
Run Code Online (Sandbox Code Playgroud)
由此我不清楚,我能做什么或不能做什么.
你不应该知道或关心什么std.algorithm.map回报,因为它是一个与传入的相同类型的范围(前向,双向,随机等).就像大多数基于范围的功能一样.它们几乎总是返回一个新的范围,它包裹传入的范围或与传入的范围完全相同的范围(例如map,前者; find后者).用途auto:
ulong[] x = [1, 2, 3];
auto y = map!"a"(x);
Run Code Online (Sandbox Code Playgroud)
返回的范围map是懒惰的.在迭代它之前它没有做任何事情(然后在每个连续front的基础范围上调用给定的函数).这种方式更有效(以及启用无限范围).确切的返回类型取决于您传入的范围类型,并且是本地的,map因此您无法直接创建一个.您需要使用auto推断类型或typeof获取类型:
typeof(map!"a"(x)) y = map!"a"(x);
Run Code Online (Sandbox Code Playgroud)
但是,通常只typeof在需要无法直接初始化的变量时使用.auto几乎总是要走的路.
如果需要根据map(或任何其他范围)的结果创建数组,请使用std.array.array:
ulong[] y = array(map!"a"(x));
Run Code Online (Sandbox Code Playgroud)
如果您对范围知之甚少,那么您应该阅读本文.不幸的是,目前还没有关于dlang.org的文章解释范围,但这个链接是一本书中的一章,其中一个D社区的成员用土耳其语写了并且一直翻译成英语,它涵盖范围公平好.
编辑:
Walter Bright最近写了一篇文章,专门讨论函数本地的类型,但函数返回的函数也可能有助于启发你.他们甚至得到一个很酷的名字:Voldemort Types in D.