Предлагаю нам продолжить разговор о тонкостях работы с классом Vector, начатый ранее в этой статье.
В ходе перевода некоторых классов разрабатываемого мною в том числе приложения на использование класса Vector, возник вопрос: «Каким образом можно наполнять экземпляр вектора нужными нам элементами при его создании?».
В случае использования массива это делается достаточно просто. Можно прибегнуть к конструктору массива:
-
var rows:Array = new Array(new Row(0, 25), new Row(183, 3));
либо же к литералу:
-
var rows:Array = [new Row(0, 25), new Row(183, 3)];
У конструктора класса Vector есть всего два строго фиксированных параметра: первый указывает длину создаваемого экземпляра, второй отвечает за то, возможно ли изменение длины вектора со временем. Поэтому передать нужные нам элементы в конструктор класса Vector у нас не получится. Литерала вектора не существует. Обратившись к документации по этому классу, максимум, что мы можем найти — это метод concat(...args):Vector.<T>, присоединяющий переданные аргументы к объекту. Т.е. следующий код:
-
var rows:Vector.<Row> = new Vector.<Row>();
-
rows.push(new Row(0, 25));
-
rows.push(new Row(183, 3));
может превратиться в:
-
var rows:Vector.<Row> = new Vector.<Row>().concat(new Row(0, 25), new Row(183, 3));
Однако если взглянуть на документацию более внимательно, то мы можем найти там глобальную функцию Vector, принимающую в качестве параметра исходный массив или вектор, элементы которого будут являться элементами будущего вектора, и возвращающую этот новый вектор. Синтаксис этой функции в точности повторяет синтаксис конструктора класса Vector, однако оператор new в этом случае использовать не нужно. И наш код превращается в следующий красивый и краткий кусок кода:
-
var rows:Vector.<Row> = Vector.<Row>([new Row(0, 25), new Row(183, 3)]);
Вот такие тонкости. Удачного вам программирования!
См. также:



[...] «Создание экземпляра Vector с заранее определенным содерж...» [...]