В ActionScript есть ли способ проверить наличие переменной с типом данных «Функция» - PullRequest
4 голосов
/ 07 мая 2010

Итак, у меня есть класс, в котором я создаю экземпляр обратного вызова переменной следующим образом:

public var callback:Function;

Пока все хорошо. Теперь я хочу добавить прослушиватель событий в этот класс и проверить наличие обратного вызова. Я делаю так:

this.addEventListener(MouseEvent.MOUSE_OVER, function(event:MouseEvent) : void {
        if (callback) {
            // do some things
        }
});

Это прекрасно работает, не выдает никаких ошибок, но везде, где я тестирую обратный вызов, я получаю следующее предупреждение:

3553: Function value used where type Boolean was expected.  
Possibly the parentheses () are missing after this function reference.

Это доставило мне неприятности, поэтому я попытался избавиться от предупреждения, проверив на null и undefined. Те вызвали ошибки. Я также не могу создать экземпляр функции с нулевым значением.

Я знаю, я знаю, настоящие программисты заботятся только об ошибках, а не о предупреждениях. Я выживу, если эта ситуация не разрешится. Но это беспокоит меня! :) Я просто невротик, или есть какой-то способ проверить, была ли создана настоящая функция без ссоры IDE по этому поводу?

Ответы [ 4 ]

6 голосов
/ 08 мая 2010

Аналогично использованию typeof:

if(callback is Function){

}

Полагаю, следует оценить значение true, если функция существует и является функцией, и значение false, если она равна нулю или не является функцией. (хотя, если это не сработает, попробуйте if(callback && callback is function){}

2 голосов
/ 08 мая 2010
if( !(callback == null)){
 // do something
}
1 голос
/ 09 мая 2010

Уже есть ответ, который работает, но я подумал, что упомяну, что вы также можете предотвратить появление предупреждения, явно приведя результат к логическому значению.

if (Boolean(callback)) {
// do something
}
0 голосов
/ 07 мая 2010

Вы пробовали:

if (typeof callback == "function") {
  // do some things
}

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/operators.html#typeof

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