using System;
namespace TestCsharpClosures
{
class Program
{
static void Main(string[] args)
{
var f = Test();
Console.WriteLine("F: " + f());
Console.WriteLine("F: " + f());
Console.WriteLine("F: " + f());
var g = Test();
Console.WriteLine("G: " + g());
Console.WriteLine("F: " + f());
Console.WriteLine("G: " + g());
Console.WriteLine("G: " + g());
}
public static Func<int> Test()
{
int a = 0;
return new Func<int>(() =>
{
return ++a;
});
// above line can be shortened to:
// return new Func<int>(() => ++a);
}
}
}
Output:
F: 1 F: 2 F: 3 G: 1 F: 4 G: 2 G: 3
..at least Mr. Everything's-a-Class could copy closure syntax from its dumb kid brother:
<script type="text/javascript">
var f = Test();
WriteLine("F: " + f());
WriteLine("F: " + f());
WriteLine("F: " + f());
var g = Test();
WriteLine("G: " + g());
WriteLine("F: " + f());
WriteLine("G: " + g());
WriteLine("G: " + g());
function Test() {
var a = 0;
return function() {
return ++a;
};
}
function WriteLine(msg) {
document.write('<div>' + msg + '</div>');
}
</script>
Output:
F: 1
F: 2
F: 3
G: 1
F: 4
G: 2
G: 3
Question of the week: What is the difference between a 'closure' and a 'lambda'?
Answer, there is none. Java don't have both of them :-)
No comments:
Post a Comment