Всем привет, возник следующий вопрос.
Допустим, мне хотелось бы сделать какую-то простую вспомогательную функцию, которая бы упрощала процесс удаления объекта из массива. Если мы работаем с
Array, то всё решается следующим образом:
Код AS3:
/**
* Удаление объекта, если он присутсвует в массиве.
*
* @param obj объект, который нужно будет удалить.
* @param array массив, из которого нужно будет удалить обект.
*
* @return флаг, который показывает, был ли удалён объект.
*/
static public function removeObjFromArray(obj:*, array:Array):Boolean
{
var isRemoved:Boolean = false;
var index:int = array.indexOf(obj);
if (index >= 0)
{
array.splice(index, 1);
isRemoved = true;
}
return isRemoved;
}
Если мне захочется то же самое сделать для типизированных массивов (
Vector), то меня ждёт небольшое разочарование:
Код AS3:
/**
* Удаление объекта, если он присутсвует в типизированном массиве.
*
* @param obj объект, который нужно будет удалить.
* @param vec типизированный массив, из которого нужно будет удалить обект.
*
* @return флаг, который показывает, был ли удалён объект.
*/
static public function removeObjFromVector(obj:*, vec:Vector.<*>):Boolean
{
var isRemoved:Boolean = false;
var index:int = vec.indexOf(obj);
if (index >= 0)
{
vec.splice(index, 1);
isRemoved = true;
}
return isRemoved;
}
Так, данная функция не позволяет использовать её для любого из видов объектов
Vector. Например следующий код вызовет ошибку (будем считать, что нужная нам функция является статической функцией класса
ArrayTools):
Код AS3:
var vec:Vector.<int> = new Vector.<int>();
vec.push(0);
vec.push(1);
vec.push(2);
ArrayTools.removeObjFromVector(1, vec);
Текст ошибки:
Error: Implicit coercion of a value of type __AS3__.vec:Vector.<int> to an unrelated type __AS3__.vec:Vector.<*>.
В то время, как такой код никакой ошибки не выдаст:
Код AS3:
var vec:Vector.<*> = new Vector.<*>();
vec.push(0);
vec.push(1);
vec.push(2);
ArrayTools.removeObjFromVector(1, vec);
Понятно, что всё дело в различии типов
int и
*, но, хотелось бы узнать, может быть есть какой-то способ сделать так, чтобы можно было работать с общими для всех объектов
Vector методами, не переписывая каждую функцию под отдельный
Vector.
За ранее спасибо за помощь =)