Я возился вокруг в Visual Studio, и я обнаружил, чтоСуществует ли использование типа делегата, который возвращает делегат того же типа, что и сам?
delegate RecursiveDelegate RecursiveDelegate();
является допустимым определение делегата.
У меня нет большого опыта функционального программирования, но мне было интересно, действительно ли этот шаблон действительно полезен в функциональном программировании или если это просто любопытство семантики. Я хочу задать этот вопрос двумя способами:
- В контексте с побочными эффектами. Я вижу, что на самом деле это на полпути достойный способ моделирования итерационных алгоритмов обучения на функциональном языке, где фактическая задача алгоритма выполняется как побочный эффект, а новая версия функции - это возвращаемое значение. Это сделано?
- В контексте без побочных эффектов. Я думаю, что это в принципе бесполезно, но мне очень любопытно, если я ошибаюсь. Может ли это быть полезным, если предположить, что реализация RecursiveDelegate() не имеет побочных эффектов?
В CLR делегат представляет собой объект, который имеет метод 'Invoke' (с некоторыми дополнительными метаданными, но это его ядро). Если вы так думаете об этом, нет ничего странного в том, что он работает. Это ничего более странного, чем объект, который возвращается в метод. – zneak
@zneak - Я не думаю, что вопрос в том, почему он работает (несколько разумный, поскольку функция может возвращать любой тип, который он хочет), а скорее, как/если он может быть полезен для функционального стиля программирования. –
Конечно. Вот почему я не отправляю ответ. Я обращался к первому удивлению. – zneak