Flex: передача функции и проверка параметров - PullRequest
1 голос
/ 05 декабря 2011

Я передаю функцию другой функции, которая работает хорошо. Допустим, функция «внутренняя» передается функции «внешняя». Моя проблема в том, что я хочу, чтобы функция "external" могла проверять, есть ли какие-либо параметры в функции "inner" и их тип. Я использую внутреннюю функцию в качестве обратного вызова, поэтому важно, чтобы у нее был один параметр определенного типа. Я бы хотел как можно раньше выявить любые проблемы, поэтому хочу, чтобы «внешняя» функция это проверила.

Как я могу проверить параметры функции? Возможно ли это во Flex?

Спасибо

1 Ответ

2 голосов
/ 05 декабря 2011

во время компиляции

На самом деле можно иметь проверку времени компиляции.Это зависит только от того, какой большой прыжок ты готов совершить.Чтобы это работало, вы должны будете написать свой код в Haxe вместо ActionScript и иметь его для платформы Flash при компиляции.В блоге Devboy хорошо читаются типы функций Haxe .

во время выполнения

Если вы не хотите заходить так далеко, воткак это сделать в AS: вам нужно использовать функцию descriptionType () .Предположим, у вас есть такой тестовый класс:

public class TestClass {    
    public function test(s:String):void {}
}

Теперь мы можем получить информацию о его функциях, написав:

var info:XML = describeType(TestClass);

Где-то в этом объекте XML будет узел, которыйвыглядит так:

<method name="test" declaredBy="net.riastar.test::TestClass" returnType="void">
  <parameter index="1" type="String" optional="false"/>
</method>

Вот оно!Вся информация, необходимая для проверки. Но есть один большой недостаток в этом подходе: метод describeType не очень эффективен.Если вам придется много делать, это замедлит работу вашего приложения.Вы можете использовать стратегию кэширования, чтобы избежать этого, хотя.Или взгляните на проект as3-commons-refle , он позаботится о кешировании для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...