Actionscript 3 Actionscript 3.0交换 是否可以在ActionScript 3中实现类似于C++ STD::SWAP的交换例程? 我是说 public static function Swap(var a, var b):void { var c = a; a = b; b = c; }

Actionscript 3 Actionscript 3.0交换 是否可以在ActionScript 3中实现类似于C++ STD::SWAP的交换例程? 我是说 public static function Swap(var a, var b):void { var c = a; a = b; b = c; },actionscript-3,swap,Actionscript 3,Swap,然后 var a:int = 3; var b:int = 5; Swap(a,b); trace(a, " ", b); // there must be 5 3 对于整数,它不能“按原样”工作,因为它们是按值传递的,而不是按引用传递到交换例程中。遗憾的是,Actionscript总是按值传递基本体,总是按引用“”传递对象(如果我错了,有人会纠正我) 您可以做的是将基本体包装到对象中 var A:Object = {"value":3}; var B:Obje

然后

    var a:int = 3;
    var b:int = 5;
    Swap(a,b);
    trace(a, " ", b); // there must be 5 3

对于整数,它不能“按原样”工作,因为它们是按值传递的,而不是按引用传递到交换例程中。

遗憾的是,Actionscript总是按值传递基本体,总是按引用“”传递对象(如果我错了,有人会纠正我)

您可以做的是将基本体包装到对象中

var A:Object = {"value":3};
var B:Object = {"value":5};

Swap(A, B);

trace(A.value, B.value);

function Swap(a:Object, b:Object):void
{
    var temp:Object = a.value;

    a.value = int(b.value);
    b.value = int(temp);
}
我知道。。。这是丑陋的,不适合在大多数情况下


事实上,事实并非如此,因为引用是不同的,但指向同一对象,与原语相反,引用指向不同的原语值。

不幸的是,您不能以这种方式实现交换,因为ActionScript 3、Java和许多其他语言。该链接将为您提供详细信息,但基本上这意味着函数内部的引用与函数外部的引用不同(即使它们确实引用了相同的对象)。因此,在函数中修改参数引用在函数外没有任何效果。您必须在线进行交换

如果函数中确实需要某些交换行为,则必须将参数包装到另一个对象中,然后可以更改内部引用:

public static function Swap(var a, var b)
{
    var c = a.value;
    a.value = b.value;
    b.value = c;
}

如果可以对SWF进行后处理,则可以使用创建

它甚至已经存在到
位宏中的交换方法