Пользовательские преобразования типов в ActionScript? - PullRequest
0 голосов
/ 24 сентября 2010

Могу ли я определить неявные или явные преобразования типов в ActionScript?

Например, я хочу определить преобразование так, чтобы Array мог неявно приводить к MyClass. Если нет, явное приведение будет полезно. Я знаю, что всегда могу передать его в свой конструктор, но здесь я имею дело с семантикой, и меня больше всего интересует решение преобразования, если оно существует.

1 Ответ

1 голос
/ 24 сентября 2010

Приведение типов в ActionScript 3

Object(instanceOfOtherObject);

Работает на основе свойства valueOf данного класса (если оно определено). Следовательно, вы можете определить свой класс MyClass следующим образом:

package {
    public class MyClass {

        private var myArray:Array;

        public function MyClass(inputArray:Array = null) {
            myArray = (inputArray ? inputArray : new Array());
        }

        public function valueOf():Array {
            return myArray;
        }
    }
}

Тогда вы сможете выполнить эту типизацию:

var mc:myClass = new MyClass();
var arr:Array = Array(myClass);

Насколько мне известно, обратное не является вариантом, поскольку функция valueOf объекта Array не возвращает объект типа MyClass. Ничто не мешает вам создать CastableArray, который расширяет и переопределяет функцию valueOf Array, чтобы он возвращал экземпляр MyClass, используя конструктор, который я определил выше, хотя вы можете столкнуться с другими проблемами с другими основными компонентами языка, которые ожидают, что Array будет вернуть массив в свойстве valueOf (сравнение объектов приходит на ум).

Я не проводил какого-либо конкретного тестирования с этим следующим предложением, но если MyClass расширяется от Array и не определяет функцию valueOf, все еще возможно выполнить преобразование типов в зависимости от конструктора MyClass и того, что Flash делает в обстоятельства, когда valueOf не определено.

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