Код:
var v0:Vector.<XML> = Vector.<XML>([new XML(<a/>)]);
var v1:Vector.<XML> = Vector.<XML>([new XML(<a/>)]);
trace(v0 == v1); //false
trace(ObjectUtil.compare(v0, v1) == 0); //stupid always true
//insane, but seems to work
var same:Boolean = true;
var found:Boolean;
for each (var item0:XML in v0){
found = false;
for each (var item1:XML in v1){
if (item0 == item1){
found = true;
break;
}
}
if (found != true){
same = false;
break;
}
}
trace(same);
Если вы замените вектор на массив, вы получите те же следы.Что странно в этом, так это то, что ObjectUtil
будет по-прежнему возвращать true, если элементы в массиве различны.
Безумный метод - только 1/2 безумного, потому что он определяет, все ли элементы v0содержится в v1.Часть 2/2 должна будет проверить, все ли элементы v1 находятся в v0 ...
Особенности ObjectUtil с массивами и векторами xml:
var arr0:Array = ['a'], arr1:Array = ['a'];
trace(ObjectUtil.compare(arr0, arr1) == 0); // true
arr1 = ['b'];
trace(ObjectUtil.compare(arr0, arr1) == 0); //false
arr0 = [new XML(<a/>)];
arr1 = [new XML(<a/>)];
trace(ObjectUtil.compare(arr0, arr1) == 0); // true
arr1 = [new XML(<b/>)];
trace(ObjectUtil.compare(arr0, arr1) == 0); //!!! true
Что это проверяет в последнем случае?2 разных объекта с разными значениями, заканчивающимися как true ...?