* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Карринг (currying)
6 февраля 2009
Карринг - это техника сведения функции многих аргументов к функции одного аргумента. Простейшим примером карринга является перегрузка функции. Однако карринг этим не ограничен, ибо его возможности намного шире. Вернёмся к нашей многосрадальной функции вычисления факториала, сейчас для её вызова нужно постоянно указывать вторым параметром единицу, но карринг избавит нас от этой повинности:
public static class Currying { public static Func<TArg1, TResult> Bind2nd<TArg1, TArg2, TResult>( this Func<TArg1, TArg2, TResult> func, TArg2 constant) { return (<img src="images/icons/icon_sleep.png" alt='x-)'> => func(x, constant); } } class Program { static void Main(string[] args) { Func<int, int, long> Factorial = null; Factorial = (n, a) => n > 1 ? Factorial(n-1, a*n) : a; var fact = Factorial.Bind2nd(1); for (int i=0; i<10; i++) Console.WriteLine("{0}! = {1}", i, fact(i)); Console.ReadLine(); } } как видишь, теперь для вычисления факториала достаточно вызвать fact(i), не будем пока вдаваться в тонкости реализации карринга в C#3, главное что ты пока должен усвоить, что он там реализован, а значит это уже мэйнстрим!