C# двойная лямбда (каррирование)

Объясните пожалуйста такое выражение:
class Program
    {
        static Func<string, Func<string, string>> func;
        static void Main(string[] args)
        {
            func = a => b => a = b;
        }
    }
  • Вопрос задан
  • 4875 просмотров
Решения вопроса 1
Vadimyan
@Vadimyan
Программист C#
Вот пример использования.
static Func<T1, Func<T2, Func<T3, TResult>>> Curry<T1, T2, T3, TResult> 
    (Func<T1, T2, T3, TResult> function) 
{ 
    return a => b => c => function(a, b, c); 
}

Увы, попытки сформулировать объяснение лучше статьи у меня не получилось. Фактически, вы можете вызвать функцию, которая вернёт вам функцию, одним из параметров которой будет переданный в первую функцию параметр.... В общем, из функции двух аргументов получается 2 функции от 1 аргумента, но вторая функция является производной от первой.
В вашем примере логики немного, но вызов может быть таким:
var result func("someText")("anotherText");
При этом значению первого параметра присвоится второй, но т.к. это строки, то с первым ничего не случится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@besagon Автор вопроса
Спасибо @Vadimyan. Действительно такие конструкции используются при каррировании функции. Изначально я просто не мог понять конструкцию типа func(a) (b) и не мог даже отыскать в гугле что означает это выражение. Но теперь всё стало на метса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы