www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Scope of lambdas and closures

reply Rolv Seehuus <rolv.seehuus gmail.com> writes:
Hi all,

First post - I'm learning D, 10yrs exp. with C++.

While trying to generate a static table of functions using lambdas compile time
using mixins, I ran in to
this little (for me) conundrum.

Given that we have this function available:
static void foo(){
    writefln("Hohum");
}

This compiles:
void function()[] funcext = [&foo];

Whereas this does not:
void function()[] funcext2 = [function(){foo();}];

Why? What are the technicalities that prevent me from setting up a lambda
during compile-time? It
seems to me that the compiler should be able to figure this out.

Any insights appreciated. :)

Cheers,
-r-
Jul 17 2011
parent reply "Daniel Murphy" <yebblies nospamgmail.com> writes:
That would be http://d.puremagic.com/issues/show_bug.cgi?id=2634

"Rolv Seehuus" <rolv.seehuus gmail.com> wrote in message 
news:ivug6b$o7o$1 digitalmars.com...
 Hi all,

 First post - I'm learning D, 10yrs exp. with C++.

 While trying to generate a static table of functions using lambdas compile 
 time using mixins, I ran in to
 this little (for me) conundrum.

 Given that we have this function available:
 static void foo(){
    writefln("Hohum");
 }

 This compiles:
 void function()[] funcext = [&foo];

 Whereas this does not:
 void function()[] funcext2 = [function(){foo();}];

 Why? What are the technicalities that prevent me from setting up a lambda 
 during compile-time? It
 seems to me that the compiler should be able to figure this out.

 Any insights appreciated. :)

 Cheers,
 -r- 
Jul 17 2011
parent reply Rolv Seehuus <rolv.seehuus gmail.com> writes:
== Quote from Daniel Murphy (yebblies nospamgmail.com)'s article
 That would be http://d.puremagic.com/issues/show_bug.cgi?id=2634
Thanks, Is there a related/same reason why this don't compile? unittest { static void stuff(){} static void function()[string] functions = [ "stuff":&stuff ]; } Cheers, -r-
Jul 19 2011
parent reply "Daniel Murphy" <yebblies nospamgmail.com> writes:
"Rolv Seehuus" <rolv.seehuus gmail.com> wrote in message 
news:j04qff$i4s$1 digitalmars.com...
 Is there a related/same reason why this don't compile?

 unittest {
  static void stuff(){}
  static void function()[string] functions = [ "stuff":&stuff ];
 }
That compiles for me.
Jul 19 2011
parent reply Rolv Seehuus <rolv.seehuus gmail.com> writes:
== Quote from Daniel Murphy (yebblies nospamgmail.com)'s article
 "Rolv Seehuus" <rolv.seehuus gmail.com> wrote in message
 news:j04qff$i4s$1 digitalmars.com...
 Is there a related/same reason why this don't compile?

 unittest {
  static void stuff(){}
  static void function()[string] functions = [ "stuff":&stuff ];
 }
That compiles for me.
Ok - Compiler version/os? I'm on MacOS, compiler outputs the following: DMD32 D Compiler v2.054 -r-
Jul 30 2011
parent Rolv Seehuus <rolv.seehuus gmail.com> writes:
== Quote from Rolv Seehuus (rolv.seehuus gmail.com)'s article
 == Quote from Daniel Murphy (yebblies nospamgmail.com)'s article
 "Rolv Seehuus" <rolv.seehuus gmail.com> wrote in message
 news:j04qff$i4s$1 digitalmars.com...
 Is there a related/same reason why this don't compile?

 unittest {
  static void stuff(){}
  static void function()[string] functions = [ "stuff":&stuff ];
 }
That compiles for me.
Doh, never mind. Sorry for wasting your time. Cheers, -r-
Jul 30 2011