Έχουν δημοσιευτεί
Παρασκευή, 7 Ιουλίου 2006 11:29 πμ
από το μέλος
PALLADIN
Ένα από τα αγαπημένα μου βιβλία είναι το Hackers & Painters του Paul Graham.
Σε ένα από τα κεφαλαια του βιβλίου πορουσιάζει την υλοποιηση μιας συνάρτησης που δημιουργεί accumulators (θέλοντας να δείξει την δύναμη των closures). Ο κώδικας που παραθέτει είναι σε διαφορες γλώσσες(Lisp, Python, SmallTalk, JavaScript και Java) (συγκρίνοντας τα παραδείγματα φαίνεται ξεκάθαρα η εκφραστική δύναμη και η μινιμαλιστική σχεδίαση της Lisp (O Paul Graham είναι γνωστός Lisp hacker)).
Στο Appendix: Power θα βρείτε τον κώδικα
http://www.paulgraham.com/icad.html
Με την C# 2.0 μπορούμε να δημιουργήσουμε closures χρησιμοποιώντας anonymous delegates.
Converter<int, int> MakeAccumulator(int n)
{
return delegate(int y) { return n += y; };
}
Converter<int, int> accumulator = MakeAccumulator(0);
Console.WriteLine( accumulator(1) ); // 1
Console.WriteLine( accumulator(1) ); // 2
Console.WriteLine( accumulator(1) ); // 3