Во многих случаях пропускаемые параметры будут известны не во время компиляции, а во время выполнения. Кроме того, нет ограничения на количество каррированных делегатов, которые могут существовать для данной функции. Следующее адаптировано из реальной программы.
У меня есть система, в которой я отправляю пакеты команд на удаленную машину и получаю ответные пакеты. Каждый пакет команд имеет порядковый номер, и каждый ответ содержит порядковый номер команды, на которую он является ответом. Типичная команда, переведенная на английский, может быть «дать мне 128 байтов, начиная с адреса 0x12300». Типичный ответ может быть «Успешным». вместе с 128 байтами данных.
Для обработки связи у меня есть подпрограмма, которая принимает несколько командных пакетов, каждый с делегатом. После получения каждого ответа соответствующий делегат будет запущен для полученных данных. Делегат, связанный с приведенной выше командой, будет выглядеть примерно так: «Подтвердите, что я получил« успех »со 128 байтами данных, и, если это так, сохраните их в моем буфере по адресу 0x12300». Обратите внимание, что несколько пакетов могут быть ожидающими в любой момент времени; параметр адреса curry необходим для того, чтобы подпрограмма знала, куда должны поступать входящие данные. Даже если бы я захотел написать подпрограмму «хранить данные в буфере», в которой не требовался параметр адреса, у него не было бы способа узнать, куда должны идти входящие данные.