d2: назначение диапазонов/итераторов фрагментам массива

Рассмотрим следующий код:

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, которые работают с диапазонами.

При выполнении этого задания я получаю Ошибка: невозможно неявно преобразовать выражение (map(arr1[])) типа Result в double[].Как я могу оценить диапазон для массива без использования

uint i = 0;
foreach (x; map!(process)(arr1[])) {
    arr2[i] = x;
    i++;
}

?

Кроме того, кто-нибудь может объяснить, почему я должен вызывать map!(process)(arr1[])вместо map!(process)(arr1)со статическими массивами? Разве статические массивы не должны быть совместимы с динамическими для средств итерации, или я что-то не понимаю?

Кроме того, кажется, что простой синтаксис перечисления foreach (index, item; sequence)не работает для диапазонов — есть ли обходные пути? Я предполагаю, что причина та же, что и почему диапазоны не могут быть назначены фрагментам массива.

7
задан toriningen 29 March 2012 в 23:07
поделиться