Kagamin wrote:
bearophile Wrote:
C#2 has lambdas, and C#3 adds closures and more type inferencing, so C#3+
supports the following syntaxes:
(int i) => { return i % 3 == 1; } // C#2
i => i % 3 == 1 // C#3
i => { return i % 3 == 1; } // C#3, with statements too
To define a delegate o delegate closure:
Func<int> foo = i => { return i % 3 == 1; };
Func<int> foo = i => i % 3 == 1;
Func<int> bar = () => 2;
But this isn't allowed:
Func<void> bar = () => 2;
Yeah, C# lambdas are the killer feature. Slick, readable, C-compatible. Anders
knows his job.
Without knowing the person, I disagree you could infer that from C#.
What I see above is a smörgåsbord of syntaxes that shoot all over the
proverbial barn door in the hope that one of them would strike someone's
fancy. That strikes me as a rather lousily done job. Also, it is my
perception (and not only mine) that C#'s creator completely missed the
power of templates and generative programming.
Let's face it: delegate literals suck a little, mixins as delegates suck a lot,
the former is too verbose, the latter just sucks.
The logic doesn't quite ring, but passons :o). For what it's worth
Walter has got positive feedback left and right from his talk discussing
the matter. A simplification in defining function literals is being
discussed (omitting the type from the parameters) that would simplify
template definitions considerably. Beyond that, I don't feel that
changes like moving the parameters on one side or the other of "{" would
be Earth-shattering.
Andrei