0

Я видел два понятияЧто отличает функция First-class от функции Anonymous?

Кажется, что эти два понятия одинаковы? (лямбда)

Я смущен?

+3

Это не то же самое. Первый класс означает, что функция * есть значение. Анонимный означает, что функция может быть создана без имени. Они, как правило, рука об руку, хотя (потому что функция как значение может быть привязана к другим именам). – user2864740

ответ

2

Функция первого класса - это единица, которая является подтвержденной - то есть ее можно манипулировать как часть языка, ее можно передать другим функциям, быть значением переменной.

Анонимная функция - это просто имя, которое не имеет имени (или не имеет имени функции, если функции и переменные занимают отдельные пространства имен).

Было бы умеренно сложно разработать язык с анонимными, не первоклассными функциями, но эти два понятия достаточно различны, что вы, по крайней мере, могли бы быть отсортированы. В равной степени вы определенно можете иметь язык с функциями первого класса, но не анонимные функции. Эти языки редки, потому что в такой конструкции мало смысла.

+0

Нужны ли нам делегаты для анонимных функций? например, C# - C# имеют делегатов, поэтому имеют анонимные функции, но java не имеет делегатов и анонимных функций. Делегаты не нужны для таких языков, как Java, Groovy, Scala, ...? – user3166171

+0

@ user3166171 Я не знаю, что такое делегаты C#. Они не нужны для анонимных функций. – Marcin

0

Marcin имеет правильный ответ. Чтобы привести несколько примеров: C и C# 1.0 имеют первоклассные функции, но не имеют анонимных функций. В обоих случаях вы можете явно объявлять именованные функции, но как только вы это сделаете, вы можете получить ссылки на них и сохранить их в переменных.