www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Dynamic array initialisers

reply Gide Nwawudu <gide btinternet.com> writes:
I have the following code, I am attempting to initialise a variable
with a dynamic array. Should the code compile or are lines 6 and 7
just wrong? 

test.d
------
import std.stdio;

void main() {
	auto  numbers1 = [ 1, 2, 3, 4]; // ok, static array int[4]
	int[] numbers2 = ([ 1, 2, 3, 4])[]; // ok
	auto  numbers3 = [ 1, 2, 3, 4][];   // Doesn't compile
	int[] numbers4 = [ 1, 2, 3, 4][];   // Doesn't compile
	
	writefln(typeof(numbers1).stringof);
	writefln(typeof(numbers2).stringof);
}


C:\>dmd test.d
a.d(6): semicolon expected following auto declaration, not '['
a.d(7): semicolon expected, not '['

Gide
Apr 17 2008
parent reply Chris R. Miller <lordSaurontheGreat gmail.com> writes:
Gide Nwawudu Wrote:

 I have the following code, I am attempting to initialise a variable
 with a dynamic array. Should the code compile or are lines 6 and 7
 just wrong? 
 
 test.d
 ------
 import std.stdio;
 
 void main() {
 	auto  numbers1 = [ 1, 2, 3, 4]; // ok, static array int[4]
 	int[] numbers2 = ([ 1, 2, 3, 4])[]; // ok
 	auto  numbers3 = [ 1, 2, 3, 4][];   // Doesn't compile
 	int[] numbers4 = [ 1, 2, 3, 4][];   // Doesn't compile
 	
 	writefln(typeof(numbers1).stringof);
 	writefln(typeof(numbers2).stringof);
 }
 
 
 C:\>dmd test.d
 a.d(6): semicolon expected following auto declaration, not '['
 a.d(7): semicolon expected, not '['

You're not using correct syntax. The first problem line, auto numbers3 = [ 1, 2, 3, 4][];, doesn't work because you forgot a comma. I think you want auto to be evaluated as int[][], however, you have two arrays without a comma seperator. It should be like this: auto numbers3 = [ 1, 2, 3, 4], []; The second line has the same problem, as well as it's improperly declared. It should be declared as int[][].
Apr 17 2008
next sibling parent reply Gide Nwawudu <gide btinternet.com> writes:
On Thu, 17 Apr 2008 18:10:20 -0400, Chris R. Miller
<lordSaurontheGreat gmail.com> wrote:

Gide Nwawudu Wrote:

 I have the following code, I am attempting to initialise a variable
 with a dynamic array. Should the code compile or are lines 6 and 7
 just wrong? 
 
 test.d
 ------
 import std.stdio;
 
 void main() {
 	auto  numbers1 = [ 1, 2, 3, 4]; // ok, static array int[4]
 	int[] numbers2 = ([ 1, 2, 3, 4])[]; // ok
 	auto  numbers3 = [ 1, 2, 3, 4][];   // Doesn't compile
 	int[] numbers4 = [ 1, 2, 3, 4][];   // Doesn't compile
 	
 	writefln(typeof(numbers1).stringof);
 	writefln(typeof(numbers2).stringof);
 }
 
 
 C:\>dmd test.d
 a.d(6): semicolon expected following auto declaration, not '['
 a.d(7): semicolon expected, not '['

You're not using correct syntax. The first problem line, auto numbers3 = [ 1, 2, 3, 4][];, doesn't work because you forgot a comma. I think you want auto to be evaluated as int[][], however, you have two arrays without a comma seperator. It should be like this: auto numbers3 = [ 1, 2, 3, 4], []; The second line has the same problem, as well as it's improperly declared. It should be declared as int[][].

I was trying create a dynamic array of ints in the same way that "hello"[] creates a dynamic array of chars. Maybe I'm mixing up array and string syntaxes? Gide
Apr 17 2008
parent reply Robert Fraser <fraserofthenight gmail.com> writes:
Gide Nwawudu wrote:
 On Thu, 17 Apr 2008 18:10:20 -0400, Chris R. Miller
 <lordSaurontheGreat gmail.com> wrote:
 
 Gide Nwawudu Wrote:

 I have the following code, I am attempting to initialise a variable
 with a dynamic array. Should the code compile or are lines 6 and 7
 just wrong? 

 test.d
 ------
 import std.stdio;

 void main() {
 	auto  numbers1 = [ 1, 2, 3, 4]; // ok, static array int[4]
 	int[] numbers2 = ([ 1, 2, 3, 4])[]; // ok
 	auto  numbers3 = [ 1, 2, 3, 4][];   // Doesn't compile
 	int[] numbers4 = [ 1, 2, 3, 4][];   // Doesn't compile
 	
 	writefln(typeof(numbers1).stringof);
 	writefln(typeof(numbers2).stringof);
 }


 C:\>dmd test.d
 a.d(6): semicolon expected following auto declaration, not '['
 a.d(7): semicolon expected, not '['

auto numbers3 = [ 1, 2, 3, 4], []; The second line has the same problem, as well as it's improperly declared. It should be declared as int[][].

I was trying create a dynamic array of ints in the same way that "hello"[] creates a dynamic array of chars. Maybe I'm mixing up array and string syntaxes? Gide

It's implicitly castable to a dynamic array (I think). Just don't use auto (isn't that "feature" annoying?): int[] numbers = [1, 2, 3, 4];
Apr 17 2008
parent reply Gide Nwawudu <gide btinternet.com> writes:
On Thu, 17 Apr 2008 17:33:45 -0700, Robert Fraser
<fraserofthenight gmail.com> wrote:

Gide Nwawudu wrote:
 On Thu, 17 Apr 2008 18:10:20 -0400, Chris R. Miller
 <lordSaurontheGreat gmail.com> wrote:
 
 Gide Nwawudu Wrote:

 I have the following code, I am attempting to initialise a variable
 with a dynamic array. Should the code compile or are lines 6 and 7
 just wrong? 

 test.d
 ------
 import std.stdio;

 void main() {
 	auto  numbers1 = [ 1, 2, 3, 4]; // ok, static array int[4]
 	int[] numbers2 = ([ 1, 2, 3, 4])[]; // ok
 	auto  numbers3 = [ 1, 2, 3, 4][];   // Doesn't compile
 	int[] numbers4 = [ 1, 2, 3, 4][];   // Doesn't compile
 	
 	writefln(typeof(numbers1).stringof);
 	writefln(typeof(numbers2).stringof);
 }


 C:\>dmd test.d
 a.d(6): semicolon expected following auto declaration, not '['
 a.d(7): semicolon expected, not '['

auto numbers3 = [ 1, 2, 3, 4], []; The second line has the same problem, as well as it's improperly declared. It should be declared as int[][].

I was trying create a dynamic array of ints in the same way that "hello"[] creates a dynamic array of chars. Maybe I'm mixing up array and string syntaxes? Gide

It's implicitly castable to a dynamic array (I think). Just don't use auto (isn't that "feature" annoying?): int[] numbers = [1, 2, 3, 4];

Thanks, maybe I've been (ab)using auto too much. Gide
Apr 18 2008
parent reply Robert Fraser <fraserofthenight gmail.com> writes:
Gide Nwawudu wrote:
 Thanks, maybe I've been (ab)using auto too much.
 
 Gide

No you haven't; that's a perfectly clear use of auto. It's a language issue that needs to be addressed.
Apr 18 2008
parent Gide Nwawudu <gide btinternet.com> writes:
On Fri, 18 Apr 2008 15:40:48 -0700, Robert Fraser
<fraserofthenight gmail.com> wrote:

Gide Nwawudu wrote:
 Thanks, maybe I've been (ab)using auto too much.
 
 Gide

No you haven't; that's a perfectly clear use of auto. It's a language issue that needs to be addressed.

I've added it as a bug. http://d.puremagic.com/issues/show_bug.cgi?id=2017
Apr 21 2008
prev sibling parent "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"Chris R. Miller" <lordSaurontheGreat gmail.com> wrote in message 
news:fu8hsc$71p$1 digitalmars.com...

 auto numbers3 = [ 1, 2, 3, 4], [];

Sorry, that's entirely wrong. First, he wants an int[]. Second, this is just using the comma operator. It would assign [] into numbers3 (if it compiled, which I don't know).
Apr 18 2008