我有一个函数,它的参数将修改多个全局变量。 而我希望这些参数是引用参数,这样它们就可以用修改参数的同一行代码来修改多个全局变量。
example(psuedocode)。
function random(a:number, b:number, c:number):void{
a = RNG(20);
b = RNG(25);
c = RNG(30);
}
会有两个不同的变量通过a, b和c传递进来, 这些是全局变量, 但a, b和c不是. 我们的目标是不需要为两组不同的变量设置RNG的数字有相同的代码行。
编辑:所以我想更多的解释我可能就会尝试研究做一个包装器或者其他对象来添加所有的变量,但我就是不知道要做什么类型的对象,怎么做。 我承认我只是在太复杂的创意中偷了点小懒。
我有两组全局变量,我想把它们传入这个函数中,并把它们设置成与RNG每组对应的相同范围。 我试图做到这一点而不为每个变量重复两次 "a = RNG(20); "的方法是将全局变量作为参数传入函数,但参数是有RNG设置的变量。 唯一可行的方法是将变量作为引用传递给函数,这样对参数设置RNG就会改变全局变量。
AS3中的数据有两种类型。
没有什么技巧,像在CC++中就有,把一些普通的变量作为指针传递,让一个方法修改原来的和唯一的值。
说到这里,有两个办法可以解决。
解决方案№1变量名称:你可以间接传递变量,比如容器→变量名称,成对传递。
function doIt(A:Object, a:String):void
{
A[a] = RNG(20);
}
解决方案№2设计一个自定义的封装类,以跨越纯数据和对象数据之间的边界。
实现方式。
package
{
public class Oint
{
public var data:int;
// Class constructor.
public function Oint(value:int = 0)
{
data = value;
}
// There's always nice to have a interface methods,
// rather than member or getter/setter, because
// you can actually link to read/write methods.
public function read():int
{
return data;
}
public function write(value:int):void
{
data = value;
}
// With this you can use Oint variables in math expressions.
public function valueOf():Object
{
return data;
}
// With this you can trace Oint variables and see their values.
public function toString():String
{
return data.toString();
}
}
}
用途:
function random(a:Oint, b:Oint, c:Oint):void
{
a.data = RNG(20);
b.data = RNG(25);
c.data = RNG(30);
}