www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Initializing global delegate variable - bug or on purpose?

reply Atila Neves <atila.neves gmail.com> writes:
int delegate(int) dg = (i) => i * 2;

Error: non-constant nested delegate literal expression __lambda3


int delegate(int) dg;

static this() {
    dg = i => i * 2; // ok
}


Am I doing anything wrong?

Atila
Mar 25 2016
parent reply data pulverizer <data.pulverizer gmail.com> writes:
On Friday, 25 March 2016 at 20:54:28 UTC, Atila Neves wrote:
 int delegate(int) dg = (i) => i * 2;

 Error: non-constant nested delegate literal expression __lambda3


 int delegate(int) dg;

 static this() {
    dg = i => i * 2; // ok
 }


 Am I doing anything wrong?

 Atila
Hmm, looks like your first delegate is a function type and the second is a function instance. So the first version written like this ... import std.stdio; alias dg = int delegate(int); dg make_dg(){ return i => i*2; } void main(){ auto my_dg = make_dg(); writeln(my_dg(3)); } will work.
Mar 25 2016
parent data pulverizer <data.pulverizer gmail.com> writes:
On Friday, 25 March 2016 at 23:40:37 UTC, data pulverizer wrote:
 On Friday, 25 March 2016 at 20:54:28 UTC, Atila Neves wrote:
 int delegate(int) dg = (i) => i * 2;

 Error: non-constant nested delegate literal expression 
 __lambda3


 int delegate(int) dg;

 static this() {
    dg = i => i * 2; // ok
 }


 Am I doing anything wrong?

 Atila
Hmm, looks like your first delegate is a function type and the second is a function instance. So the first version written like this ... import std.stdio; alias dg = int delegate(int); dg make_dg(){ return i => i*2; } void main(){ auto my_dg = make_dg(); writeln(my_dg(3)); } will work.
In fact for the second case I'd probably need to see a working struct/class prototype to make a firm comment on it.
Mar 25 2016