www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - anonymous function/deleget usage

reply Sam Hu <samhu.samhu nospam.com> writes:
How can I reach something like below code:

int a=1;
int b=2;
int c=(int a,int b){
   return a+b;}
writefln("Result:%d",c);

Thanks in advance.
Nov 12 2009
parent reply Don <nospam nospam.com> writes:
Sam Hu wrote:
 How can I reach something like below code:
 
 int a=1;
 int b=2;
 int c=(int a,int b){
    return a+b;}
 writefln("Result:%d",c);
 
 Thanks in advance.
You need to call the delegate you've made. int a=1; int b=2; int c=(int a,int b){ return a+b;}(a,b); writefln("Result:%d",c);}
Nov 12 2009
next sibling parent reply "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Thu, 12 Nov 2009 10:21:44 -0500, Don <nospam nospam.com> wrote:

 Sam Hu wrote:
 How can I reach something like below code:
  int a=1;
 int b=2;
 int c=(int a,int b){
    return a+b;}
 writefln("Result:%d",c);
  Thanks in advance.
You need to call the delegate you've made. int a=1; int b=2; int c=(int a,int b){ return a+b;}(a,b); writefln("Result:%d",c);}
Also, don't forget you can refer to variables in the enclosing function: int c = (){return a + b;}(); -Steve
Nov 12 2009
parent reply bearophile <bearophileHUGS lycos.com> writes:
Steven Schveighoffer:

 int c = (){return a + b;}();
You can also write: int c = {return a + b;}(); Bye, bearophile
Nov 12 2009
parent Ary Borenszweig <ary esperanto.org.ar> writes:
bearophile wrote:
 Steven Schveighoffer:
 
 int c = (){return a + b;}();
You can also write: int c = {return a + b;}(); Bye, bearophile
Shorter: int c = a + b;
Nov 12 2009
prev sibling parent reply Sam Hu <samhu.samhu nospam.com> writes:
Don Wrote:

 You need to call the delegate you've made.
I missed this key point. So to summary: int a=1; int b=2; 1.nested function; 2.int c=(int a,int b){return a+b;}(a,b); 3.int c=(int,int){return a+b;}(a,b); 4.int c=(){return a+b;}(); 5.int c={return a+b;}(); How come the last one is legal? Thank you all for all your help!
Nov 12 2009
parent reply BCS <none anon.com> writes:
Hello Sam,

 Don Wrote:
 
 You need to call the delegate you've made.
 
I missed this key point. So to summary: int a=1; int b=2; 1.nested function; 2.int c=(int a,int b){return a+b;}(a,b); 3.int c=(int,int){return a+b;}(a,b); 4.int c=(){return a+b;}(); 5.int c={return a+b;}(); How come the last one is legal?
If the function has no args the first () can be dropped. If the return type can be inferred, that can be dropped. Nested functions can access vars in the outer function.
 
 Thank you all for all your help!
 
Nov 12 2009
parent Sam Hu <samhu.samhu nospam.com> writes:
BCS Wrote:

 If the function has no args the first () can be dropped.
 If the return type can be inferred, that can be dropped.
 Nested functions can access vars in the outer function.
 
Got it.Thanks a lot!
Nov 12 2009