【发布时间】:2012-03-29 22:26:30
【问题描述】:
考虑以下代码:
enum size = 16;
double[size] arr1 = [...];
double[size] arr2 = [...];
process = (double x) { return (x + 1); };
arr2[] = map!(process)(arr1[]); // here
我无法将 map 的结果转换回我的普通数组。问题不仅适用于map,还适用于take、repeat 以及来自std.algorithm 和std.range 的所有在范围上运行的优秀工具。
在这个任务中,我得到了Error: cannot implicitly convert expression (map(arr1[])) of type Result to double[]。如何在不使用的情况下将范围评估为数组
uint i = 0;
foreach (x; map!(process)(arr1[])) {
arr2[i] = x;
i++;
}
?
另外,有人可以解释一下,为什么我必须用静态数组调用map!(process)(arr1[]) 而不是map!(process)(arr1)?静态数组不应该与动态的迭代方式兼容,还是我什么都没有?
此外,简单的枚举语法foreach (index, item; sequence) 似乎不适用于范围 - 是否有解决方法?我猜原因与为什么不能将范围分配给数组切片的原因相同。
【问题讨论】: