传递变量作为参考 AS3
Pass Variables As Reference AS3
我有一个函数,它的参数将修改多个全局变量。我希望参数是引用参数,这样它们就可以使用修改参数的相同代码行来修改多个全局变量。
示例(伪代码):
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 中有两种类型的数据:
- 纯数据:布尔值、字符串、数字、整数、uint — 始终作为值传递。
- 对象:Object、Array 以及字面上的所有其他内容 — 始终作为 pointer/reference 而不是通过 copy/clone.
没有技巧,就像在 C/C++ 中一样,将一些普通变量作为指针传递,让方法修改原始值和唯一值。
也就是说,有两种解决方法。
方案一:可以间接传递变量,像容器→变量名成对传递。
function doIt(A:Object, a:String):void
{
A[a] = RNG(20);
}
解决方案 №2:设计一个自定义包装器 class 来跨越普通数据和对象数据之间的边界。
实施:
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);
}
我有一个函数,它的参数将修改多个全局变量。我希望参数是引用参数,这样它们就可以使用修改参数的相同代码行来修改多个全局变量。
示例(伪代码):
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 中有两种类型的数据:
- 纯数据:布尔值、字符串、数字、整数、uint — 始终作为值传递。
- 对象:Object、Array 以及字面上的所有其他内容 — 始终作为 pointer/reference 而不是通过 copy/clone.
没有技巧,就像在 C/C++ 中一样,将一些普通变量作为指针传递,让方法修改原始值和唯一值。
也就是说,有两种解决方法。
方案一:可以间接传递变量,像容器→变量名成对传递。
function doIt(A:Object, a:String):void
{
A[a] = RNG(20);
}
解决方案 №2:设计一个自定义包装器 class 来跨越普通数据和对象数据之间的边界。
实施:
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);
}