使用数组将MapResult转换为数组

时间:2014-03-24 00:23:06

标签: templates d

我使用array中的std.arrayMapResult转换为特定的数组类型时遇到了一些麻烦。我的问题如下:

我有一个对象数组a,每个对象都有一个可公开访问的字段val。我想使用map中的std.algorithm来查看a并返回val成员的所有值的数组。我的代码看起来像这样:

import std.algorithm:map;
import std.array:array;
//import for my object type, which I call Box here

ulong[] fun (Box[] a) {
return array!(ulong[])(map!(function ulong(Box x) {return x.val;})(a);
}

但是,当我尝试这样做时,编译器给出了一个错误,指出array不能从参数类型!(ulong[])(MapResult!(_funcliteral3,Box[]))中推导出该函数。这是否意味着MapResult s不是范围,是否有办法获得我想要的东西?

1 个答案:

答案 0 :(得分:5)

实际上这意味着编译器认为(ulong[])(MapResult!(_funcliteral3,Box[]))是模板参数而不是ulong[]

正确嵌套括号,应该修复

return array!(ulong[])(map!(function ulong(Box x) {return x.val;})(a));