digitalmars.D.learn - Lambda are capricious little animals indeed
- Derix (22/22) Oct 27 2013 So, I wanted to wrap my head a little tighter around those
- Maurice (6/13) Oct 27 2013 You still have to call the lambda just like a function, with ():
- Maurice (9/25) Oct 27 2013 Some clarification:
- David Nadlinger (4/9) Oct 27 2013 Yes, this is correct.
So, I wanted to wrap my head a little tighter around those
strange animals that are lamdas.
I wrote the simpliest program utilizing a lambda :
import std.stdio;
void main(){
writeln({return "foobar";});
}
and it yields 43106C, which does not look like "foobar" at all,
but rather, I suspect, like a pointer or something.
So I tried
writeln(typeid({return "foobar";}));
which in turn yelds immutable(char)[]()*
that hints further to a pointer.
I get the immutable(char)[] : an immutable array of characters,
why not. But I really don"t get the set of parens between the
square brackets and the asterisk. Could that mean that what I get
is in fact a pointer to a function ? (said function having no
arguments, or having void as sole argument or ...)
Now, the question (and the very point of a lambda if I get it
right) would be to get this function to evaluate (and precisely
return the string "foobar" in this example).
What syntactic subtility am I missing ?
Oct 27 2013
On Sunday, 27 October 2013 at 14:01:31 UTC, Derix wrote:
So, I wanted to wrap my head a little tighter around those
strange animals that are lamdas.
I wrote the simpliest program utilizing a lambda :
import std.stdio;
void main(){
writeln({return "foobar";});
}
You still have to call the lambda just like a function, with ():
import std.stdio;
void main() {
writeln({return "foobar";}());
}
Oct 27 2013
On Sunday, 27 October 2013 at 14:10:50 UTC, Maurice wrote:On Sunday, 27 October 2013 at 14:01:31 UTC, Derix wrote:Some clarification: import std.stdio; void main() { auto f = {return "foobar";}; // f behaves like a function. auto s = f(); // it can be called like any other function, it takes no parameters. writeln(s); }So, I wanted to wrap my head a little tighter around those strange animals that are lamdas. I wrote the simpliest program utilizing a lambda : import std.stdio; void main(){ writeln({return "foobar";}); }You still have to call the lambda just like a function, with (): import std.stdio; void main() { writeln({return "foobar";}()); }
Oct 27 2013
On Sunday, 27 October 2013 at 14:01:31 UTC, Derix wrote:I get the immutable(char)[] : an immutable array of characters, why not. But I really don"t get the set of parens between the square brackets and the asterisk. Could that mean that what I get is in fact a pointer to a function ? (said function having no arguments, or having void as sole argument or ...)Yes, this is correct. You still have to call the lambda: { return 42; }(). David
Oct 27 2013









"Maurice" <m-ou.se m-ou.se> 