Рассмотрим следующий код:
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)
не работает для диапазонов — есть ли обходные пути? Я предполагаю, что причина та же, что и почему диапазоны не могут быть назначены фрагментам массива.