Переменная AS3 объявлена ​​как нулевая функция

Я столкнулся с функцией AS3, объявленной как переменная null, например:

public var edgeWeights:Function = null;

Я не знаю, как использовать эту функцию, чтобы изменить null на другое значение (например, число 2 или 3). Я думал, что что-то вроде cs.edgeWeights = 2 может работать, но это создает ошибку компиляции, как и cs.edgeWeights(2);

Я считаю, что это анонимные функции в AS3, и я провел некоторое исследование по ним, но не смог найти решение этой ситуации.


person tomish    schedule 20.11.2013    source источник
comment
Не могли бы вы опубликовать код, который вы написали до сих пор? Кроме того, почему вы пытаетесь объявить переменную Function, инициализировать ее значением null, а затем попытаться установить ее равной int?   -  person Jonny Henly    schedule 20.11.2013
comment
Функция не может быть установлена ​​на числовое значение. Он может возвращать числовое значение, но не видя, как в коде используется edgeWeights, не уверен, что кто-то может вам помочь.   -  person prototypical    schedule 20.11.2013


Ответы (3)


public var edgeWeights:Function = null;

Эта запись означает объявление переменной edgeWeights типа Function. В Actionscript Function является объектом и может быть установлен на null.

Чтобы использовать его, вам нужно установить эту переменную в какую-то функцию. Например: edgeWeights = function(a:int,b:int):int { return a+b } или edgeWeights = Math.sin.

Какую функцию вы должны установить там, зависит от вашего конкретного случая.

person Johnny Moonlight    schedule 20.11.2013
comment
Хм, спасибо - я все еще не получаю результат, который ищу. Просто чтобы добавить немного ясности, я не могу изменить public var edgeWeights:Function = null; заявление - это дается мне классом as3, который я вызываю. Итак, задача состоит в том, как превратить этот «ноль» в «3» в программе, которую я пишу. Спасибо! - person tomish; 20.11.2013
comment
Похоже, вы не понимаете, как использовать класс. Ваша предполагаемая задача, вероятно, является шагом в неверном направлении? Этот ответ объяснил концепцию, которую вам нужно понять, если вы хотите использовать этот класс, о котором вы говорите. - person prototypical; 20.11.2013
comment
@томиш public var edgeWeights:Function = function():Number {return 3; } - person Vesper; 21.11.2013

Если вы предполагаете, что класс, который объявляет edgeWeights, равен Widget:

protected var widget:Widget;

protected function createWidget():void {
    widget = new Widget();
    widget.edgeWeights = widgetCallback;
}

//signature would need to match what the Widget
//actually expects this callback to do
protected function widgetCallback():void {
    trace('hi from widget callback');
}

Обратите внимание, что, вероятно, плохая практика - иметь общедоступную переменную обратного вызова и не предоставлять реализацию по умолчанию, поэтому, если у вас есть доступ к исходному коду, вам, вероятно, следует это исправить.

person Amy Blankenship    schedule 20.11.2013
comment
Привет, Эми, спасибо за это. Я озадачен, почему эта функция edgeWeights была реализована именно так, как она была в исходном коде. Кажется неловким. Я бы предпочел попытаться обойти это, а не перекомпилировать исходный код, но, возможно, мне придется это сделать. - person tomish; 21.11.2013

Учитывая любую функцию:

public function someFunction()
{
    ...
}

Вы можете создать «указатель» с помощью этого: this.edgeWeights = someFunction; (да, без ())

Позже вы просто используете: this.edgeWeights(); и будете звонить someFunction().

person Iagows    schedule 21.11.2013
comment
Спасибо, кажется, это работает — по крайней мере, это больше не приводит к сбою программы: function myFunction() { } cs.edgeWeights = myFunction; - person tomish; 21.11.2013