Вектор ActionScript 3 не расширяет вектор * - PullRequest
1 голос
/ 16 ноября 2011

В настоящее время меня смущает класс Vector.Я написал красивый XML для парсера TypedClass.Работает красиво и без ошибок. ДО сотрудник заметил, что мы получили ошибку преобразования для Vector.<Number> to Vector.<*>.

Каждый Vector Я когда-либо проверял все расширения Vector.<*>.

Vector.<Sprite>, Vector.<String>, Vector.<Point>, Vector.<Boolean>, Vector.<TextField>, Vector.<CustomObject> и т. Д. И т. Д. И т. Д. ВСЕ из них.

<type name="__AS3__.vec::Vector.<String>" base="__AS3__.vec::Vector.<*>" isDynamic="true" isFinal="false" isStatic="false">
  <extendsClass type="__AS3__.vec::Vector.<*>"/>
  <extendsClass type="Object"/>
  <accessor name="length" access="readwrite" type="uint" declaredBy="__AS3__.vec::Vector.<*>"/>
  <accessor name="fixed" access="readwrite" type="Boolean" declaredBy="__AS3__.vec::Vector.<*>"/>
</type>

Но тогда, когда я использую attributeType на Vector.<Number>, Vector.<uint> и Vector.<int>.

<type name="__AS3__.vec::Vector.<Number>" base="Object" isDynamic="true" isFinal="true" isStatic="false">
  <extendsClass type="Object"/>
  <constructor>
    <parameter index="1" type="uint" optional="true"/>
    <parameter index="2" type="Boolean" optional="true"/>
  </constructor>
  <accessor name="length" access="readwrite" type="uint" declaredBy="__AS3__.vec::Vector.<Number>"/>
  <accessor name="fixed" access="readwrite" type="Boolean" declaredBy="__AS3__.vec::Vector.<Number>"/>
</type>

Теперь я учел эти 3 вектора по отдельности, поскольку даже uint и int не расширяются Vector.<Number>, как я и ожидал.И моя функция синтаксического анализа снова работает для всех типов.Но моя путаница связана с тем, ПОЧЕМУ это так, и почему я не смог найти никакой документации по этому вопросу.

1 Ответ

1 голос
/ 16 ноября 2011

Я задавал тот же вопрос на форумах Kirupa несколько месяцев назад, но я не могу всю жизнь найти ветку.

Если я правильно помню это, Vector.<Number>, Vector.<int>Vector.<uint> (но не Boolean или String, как ни странно) классы сделаны так, чтобы они были максимально быстрыми , поэтому они записываются и обрабатываются как отдельные классы Flash Player.

Как вы заметили, все другие классы Vector расширяются Vector.<*>, и проверка типов выполняется немного по-другому (вот почему Векторы быстрее с int, uint и Number, но массивы немного быстрее для всех других классов)


В любом случае, это было ПОЧЕМУ .Что касается того, как обойти эту проблему, я боюсь, что вам придется передать ваш вектор как нетипизированный функции, в которой вы хотите его использовать:

public function addItem(vector:*, item:*)
    { vector.push(item); }
...