Не похоже, что среда выполнения позволяет вам размышлять об анонимных функциях, а это позор.
Анонимные функции (возможно, по определению) помечены как dynamic. Если вы передаете несовместимый тип в анонимную функцию, ошибка не возникает. Любые несоответствия типов будут автоматически отбрасываться, насколько это возможно. Передача чего-то вроде "minotaur" в качестве параметра uint даст, например, 0 (ноль).
Если вы ДЕЙСТВИТЕЛЬНО хотите перепроектировать его, вы можете получить на нем все ООП. Вместо того, чтобы принимать анонимные функции, вы можете объявить интерфейс, содержащий соответствующую сигнатуру функции, и принять объекты, реализующие этот интерфейс.
public interface IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType;
}
И ваша функция просто должна быть упакована в объект:
public class ConcreteCallback implements IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType {
princess.kiss(frog);
return new UsefulReturnType("jabberwocky");
}
}
Может иметь потенциал для создания большого количества накладных расходов кода. Зависит от того, сколько обратных вызовов вы намерены иметь, кто будет их делать и насколько серьезным будет, если сигнатура анонимной функции будет неверной.
Можете ли вы рассказать больше о проблеме, которую вы пытаетесь решить?
person
aaaidan
schedule
08.12.2008