digitalmars.D - Bug in the array set operator
- roumen (15/15) Jun 22 2006 I'm fairly certain that the code below should not work, but it compiles ...
-
Chris Miller
(8/25)
Jun 22 2006
On Thu, 22 Jun 2006 21:39:40 -0400, roumen
... - Sjoerd van Leent (7/27) Jun 24 2006 It's the correct behaviour. You have to see this as the mathematical
- Tom S (5/8) Jun 24 2006 or just:
- Ameer Armaly (4/33) Jun 24 2006 In short, saying [a..$] means "go up to but not including $," which mean...
I'm fairly certain that the code below should not work, but it compiles and works OK. And if I use the "correct" statement a[0..a.length-1] = 0; it does not set the last element. import std.stdio; private int[5] a = [1, 2, 3, 4, 5]; void main(char[][] arg) { foreach (int n; a) writef("%d ", n); writefln(); a[0..a.length] = 0; // BUG: should be a.length-1 foreach (int n; a) writef("%d ", n); writefln(); }
Jun 22 2006
On Thu, 22 Jun 2006 21:39:40 -0400, roumen <roumen_member pathlink.com> = = wrote:I'm fairly certain that the code below should not work, but it compile=s =and works OK. And if I use the "correct" statement a[0..a.length-1] =3D 0;=it =does not set the last element. import std.stdio; private int[5] a =3D [1, 2, 3, 4, 5]; void main(char[][] arg) { foreach (int n; a) writef("%d ", n); writefln(); a[0..a.length] =3D 0; // BUG: should be a.length-1 foreach (int n; a) writef("%d ", n); writefln(); }It's [inclusive..exclusive], so [0..length] is the whole array and [0..0= ] = is empty.
Jun 22 2006
roumen schreef:I'm fairly certain that the code below should not work, but it compiles and works OK. And if I use the "correct" statement a[0..a.length-1] = 0; it does not set the last element. import std.stdio; private int[5] a = [1, 2, 3, 4, 5]; void main(char[][] arg) { foreach (int n; a) writef("%d ", n); writefln(); a[0..a.length] = 0; // BUG: should be a.length-1 foreach (int n; a) writef("%d ", n); writefln(); }It's the correct behaviour. You have to see this as the mathematical expression: [a .. b) In D, you can shorten your array statement as: a[0..$] = 0; Regards, Sjoerd
Jun 24 2006
Sjoerd van Leent wrote:In D, you can shorten your array statement as: a[0..$] = 0;or just: a[] = 0; -- Tomasz Stachowiak /+ a.k.a. h3r3tic +/
Jun 24 2006
"Sjoerd van Leent" <svanleent gmail.com> wrote in message news:e7jt2l$175u$1 digitaldaemon.com...roumen schreef:In short, saying [a..$] means "go up to but not including $," which means all elements. A bit confusing at first, but useful.I'm fairly certain that the code below should not work, but it compiles and works OK. And if I use the "correct" statement a[0..a.length-1] = 0; it does not set the last element. import std.stdio; private int[5] a = [1, 2, 3, 4, 5]; void main(char[][] arg) { foreach (int n; a) writef("%d ", n); writefln(); a[0..a.length] = 0; // BUG: should be a.length-1 foreach (int n; a) writef("%d ", n); writefln(); }It's the correct behaviour. You have to see this as the mathematical expression: [a .. b)In D, you can shorten your array statement as: a[0..$] = 0; Regards, Sjoerd
Jun 24 2006