Я пытаюсь следующий код:
import std.stdio;
import std.range;
void main(){
auto data = [[1,2,3], [4,5,6]]; // putting auto instead of int[][] here makes no difference;
auto coldata = data.transposed;
writeln("coldata: ", coldata); // prints ok;
writeln("transposed data: ", coldata); // Empty list is printed. Data disappears/evaporates!
}
Вывод:
$ rdmd evapor.d
coldata: [[1, 4], [2, 5], [3, 6]]
transposed data: []
Во втором вызове печатается пустой список. Данные, кажется, просто исчезают / испаряются!
Почему данные не выводятся при втором вызове?
Редактировать: Пустой список печатается, даже если я звоню транспонировать каждый раз:
writeln("coldata: ", data.transposed); // prints ok;
writeln("transposed data: ", data.transposed); // data disappears / evaporates!
Также использование coldata.dup
не работает. Выдает следующую ошибку:
soq_evapor.d(10): Error: template object.dup cannot deduce function from argument types !()(Transposed!(int[][], cast(TransverseOptions)0)), candidates are:
/usr/include/dmd/druntime/import/object.d(3169): object.dup(T : V[K], K, V)(T aa)
/usr/include/dmd/druntime/import/object.d(3206): object.dup(T : V[K], K, V)(T* aa)
/usr/include/dmd/druntime/import/object.d(4482): object.dup(T)(T[] a) if (!is(const(T) : T))
/usr/include/dmd/druntime/import/object.d(4508): object.dup(T)(const(T)[] a) if (is(const(T) : T))
Failed: ["/usr/bin/dmd", "-v", "-o-", "soq_evapor.d", "-I."]