However, that is a confusing syntax because the right-hand side
is not the same type as the elements, which is dchar[3].
Perhaps D supports it for C compatibility?
Yes, I noticed:
arr = '!';
Error: cannot implicitly convert expression ('!') of type char to
dchar[3u][]
Look like there is a consequence - can't perform array-wise
operations on multidimensional arrays? And that's why a need to
touch the elements themselves, like in the example you provided:
import std.stdio;
void main()
{
dchar[3][5] arr = '.';
foreach (ref e; arr) {
e[2] = '!';
}
writeln(arr);
}
a[] alone is a slice to all of the elements of 'a'. When you
use that syntax in an operation, then that operation is applied
"array-wise":
a[] = b[] + c[];
That is the same as
a[i] = b[i] + c[i]
for all valid values of 'i'.
I truly got what the problem is after this part. Thanks for a
very detailed explanation.
Also huge thank you for your book - holy grail for beginners.
--------------------------------
But this doesn't compile:
char[3][5] arr = [ '.', '.', '.' ];
Error: mismatched array lengths, 15 and 3
I see that as a bug but can't be sure.
Others seem to agree with you, will you be submitting this bug?
--Oleksiy