Лексическая разбивка приложения частичной функции
Здравствуйте гуру,
Во-первых, я повторно отправляю этот вопрос из-за недоразумения, возникшего у меня по поводу входа в проект кода. Приношу свои извинения за любую путаницу, которую это может вызвать.
В предыдущий пост У меня была проблема, которая была аккуратно решена с помощью приложений частичных функций. Теперь у меня есть проблема, но не с кодированием решения, а с попыткой понять синтаксис решения.
Фон:
Я определил набор функций, которые я использую для проверки данных. Вот такой пример
Func<int, Func<object, string>> MaxLen => max => value => CheckLength(value, max);
который я использую в словаре, определяющем правила для различных полей данных в файле:
_rules = новые Файлеры()
{
{ "FH03", new FieldRules() { буквенно-цифровой, MaxLen(10), ... } },
{ "FH04", new FieldRules() { буквенно-цифровой, MaxLen(30), ... } },
...
};
Я использую его вот так
object validated = stuffToOutput; try { foreach (var rule in _rules[fieldId]) { validated = rule(validated); } } catch (Exception ex) { ... }
Это позволяет мне передать данные для поля FH03 и проверить его, чтобы убедиться, что оно является буквенно-цифровым и имеет максимальную длину 10 символов и т. д. Этот код прекрасно работает, и я понимаю, как он работает. Моя проблема в том, что я изо всех сил пытаюсь объяснить другим, как это работает. В частности, правильная терминология, используемая для описания определения приложения частичной функции в синтаксисе, который я использую.
Проблема:
Эта страница указывает, что лямбда-выражения интерпретируются как параметры слева от => и выражения справа. С этим
value => CheckLength(value, max)
легко объясняется как лямбда, которая принимает параметр, называемый ценность и возвращает результат Контрольная длина(значение, макс.).
max => value => CheckLength(value, max)
объясняется как лямбда, которая принимает параметр, называемый максимум и возвращает результат агнцапапа справа.
Но потом я добираюсь до
Func<int, Func<object, string>> MaxLen => max => value => CheckLength(value, max)
Что такое в лексиконе C# Аналогичная?
Это не так. параметр - его использование в первом блоке кода (где определены словарные статьи) несовместимо с тем, что он является параметром.
Я подумал, что было бы разумно сказать, что это имя a им делегировать, но он не соответствует синтаксической сигнатуре любых типов делегатов, показанных на эта страница MS Все эти примеры показывают, что
Delegate delegatename = delegatedefinition;
Здесь нет = в синтаксисе, который я использую.
Даже эта ссылка, который показывает тип делегата действия, используемый с лямбда-выражением в качестве определения, использует синтаксис
Action delegatename = parms => lambda-expression;
Является Аналогичная один Функция- Опять ? эта запись показывает, что функции также выражаются равными знаками
Func funcname = parms => lambda-expression;
Опять же, в моем нет знака равенства.
Итак, как бы я сказал, что именно Аналогичная есть? Какова правильная терминология для его описания?
Что я уже пробовал:
Ломаю себе голову
Чистящий МС-сайты для терминологии