Я пытаюсь понять, чем метод программирования, известный как каррирование, отличается от обычного интерфейса обратного вызова (например, интерфейсов Observer / Observable в Java или классического шаблона проектирования Visitor).
Я понимаю, что такое каррирование, я просто не понимаю, почему он так полезен, что требует собственной терминологии и языковой поддержки.
Может ли кто-нибудь объяснить ситуацию программирования, которую лучше решить каррированием, чем методом обратного вызова? Каково практическое значение того факта, что каррирование использует отдельную функцию для каждого аргумента?
[update:] резюмируя полученные ответы: каррирование является неотъемлемой частью того факта, что функции являются "первоклассными" гражданами, то есть объектами, которые могут быть созданы и переданы, как и любые другие ссылки на объекты. Это позволяет возвращать функцию из функции, другими словами каррирование.
Что касается причины, по которой каррирование полезно, каррирование предоставляет синтаксис, позволяющий кратко декорировать вызовы функций, чтобы производные функции могли быть созданы с минимальными накладными расходами на шаблонный код. В то время как в java вы можете создать несколько перегруженных или «оберточных» методов для каждого частичного набора параметров, которые в конечном итоге вызывают главный метод, содержащий все параметры, каррирование обеспечивает более легкий синтаксис, который позволяет вам генерировать эти «функциональные обертки» по мере необходимости в вашем коде.