import std.stdio,
std.range,
std.traits,
std.algorithm;
// static int idx; // 1, 2, 3, 4, 5, 6, 7 // OK
auto deepDup(A)(A arr)
if (isArray!A)
{
static int idx; // 1, 1, 1, 2, 2, 3, 4 // Why is this happening?
++idx;
writeln("visited");
static if (isArray!(ElementType!A)) {
writeln("ifIdx = ", idx);
writeln("ifArr = ", arr);
return arr.map!(a => a.deepDup).array;
} else {
writeln("elseIdx = ", idx);
writeln("elseArr = ", arr);
return arr.dup;
}
}
void main() {
auto a = [[[1, 2, 3], [4, 5, 6, 7, 8]],
[[9, 10], [11, 12, 13]]];
auto b = a.deepDup;
b[0][1][1 .. $ - 1] *= 3;
writeln("\nResualt: ");
writeln("a = ", a);
// [[[1, 2, 3], [4, 5, 6, 7, 8]],
// [[9, 10], [11, 12, 13]]]
writeln("b = ", b);
// [[[1, 2, 3], [4, 15, 18, 21, 8]],
// [[9, 10], [11, 12, 13]]]
}
aW1wb3J0IHN0ZC5zdGRpbywKICAgICAgIHN0ZC5yYW5nZSwKICAgICAgIHN0ZC50cmFpdHMsCiAgICAgICBzdGQuYWxnb3JpdGhtOwoKLy8gc3RhdGljIGludCBpZHg7IC8vIDEsIDIsIDMsIDQsIDUsIDYsIDcgLy8gT0sKCmF1dG8gZGVlcER1cChBKShBIGFycikKCWlmIChpc0FycmF5IUEpCnsKCXN0YXRpYyBpbnQgaWR4OyAvLyAxLCAxLCAxLCAyLCAyLCAzLCA0IC8vIFdoeSBpcyB0aGlzIGhhcHBlbmluZz8KCSsraWR4OwoJd3JpdGVsbigidmlzaXRlZCIpOwoJc3RhdGljIGlmIChpc0FycmF5IShFbGVtZW50VHlwZSFBKSkgewoJCXdyaXRlbG4oImlmSWR4ID0gIiwgaWR4KTsKCQl3cml0ZWxuKCJpZkFyciA9ICIsIGFycik7CgkJcmV0dXJuIGFyci5tYXAhKGEgPT4gYS5kZWVwRHVwKS5hcnJheTsKCgl9IGVsc2UgewoJCXdyaXRlbG4oImVsc2VJZHggPSAiLCBpZHgpOwoJCXdyaXRlbG4oImVsc2VBcnIgPSAiLCBhcnIpOwoJCXJldHVybiBhcnIuZHVwOwoJfQp9Cgp2b2lkIG1haW4oKSB7CgoJYXV0byBhID0gW1tbMSwgMiwgM10sIFs0LCA1LCA2LCA3LCA4XV0sCgkJICBbWzksIDEwXSwgWzExLCAxMiwgMTNdXV07CgoJYXV0byBiID0gYS5kZWVwRHVwOwoKCWJbMF1bMV1bMSAuLiAkIC0gMV0gKj0gMzsKCgl3cml0ZWxuKCJcblJlc3VhbHQ6ICIpOwoKCXdyaXRlbG4oImEgPSAiLCBhKTsKCS8vIFtbWzEsIDIsIDNdLCBbNCwgNSwgNiwgNywgOF1dLAoJLy8gIFtbOSwgMTBdLCBbMTEsIDEyLCAxM11dXQoJd3JpdGVsbigiYiA9ICIsIGIpOwoJLy8gW1tbMSwgMiwgM10sIFs0LCAxNSwgMTgsIDIxLCA4XV0sCgkvLyAgW1s5LCAxMF0sIFsxMSwgMTIsIDEzXV1dCn0=
visited
ifIdx = 1
ifArr = [[[1, 2, 3], [4, 5, 6, 7, 8]], [[9, 10], [11, 12, 13]]]
visited
ifIdx = 1
ifArr = [[1, 2, 3], [4, 5, 6, 7, 8]]
visited
elseIdx = 1
elseArr = [1, 2, 3]
visited
elseIdx = 2
elseArr = [4, 5, 6, 7, 8]
visited
ifIdx = 2
ifArr = [[9, 10], [11, 12, 13]]
visited
elseIdx = 3
elseArr = [9, 10]
visited
elseIdx = 4
elseArr = [11, 12, 13]
Resualt:
a = [[[1, 2, 3], [4, 5, 6, 7, 8]], [[9, 10], [11, 12, 13]]]
b = [[[1, 2, 3], [4, 15, 18, 21, 8]], [[9, 10], [11, 12, 13]]]