代码:
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 ...
使用xml的数组和向量的ObjectUtil pecularity:
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个不同的对象,不同的值最终为真......?