是否可以在ActionScript 3中将参数传递给方法ByRef(或out out)?
我的类顶部有一些全局范围的变量,如果它是== null,我的方法将填充该变量。
我正在传递需要填充的变量,但到目前为止,我的努力已返回一个本地填充的变量,使其全局范围版本仍然为null。
传递给我的方法的变量各不相同,所以我不能在我的方法中硬编码并只是设置它。
答案 0 :(得分:4)
ActionScript 3默认情况下通过引用传递params,如Java - 原始类型除外。但是你想要它做的不是通过引用传递。传入的参数是对象的引用(在它不是基本类型的情况下),你可以在函数内部修改它。
但是,回答你的问题。这是一个解决方案:
function populateIfNull(variableName, value){
this[variableName] = this[variableName] || value
}
您可以使用:
populateIfNull('name', 'Bob')
populateIfNull('age', 20)
答案 1 :(得分:1)
AS3没有通过引用传递(在这方面类似于Java,因为它按值传递引用)。
如果通过将对象包装在另一个对象中来控制客户端代码,则可以模拟类似的东西:
var myObj = null;
myFun({ a: myObj });
function (param) {
if (param.a == null) {
param.a = "Hello";
}
}
答案 2 :(得分:1)
使用对象。
例如:
var myObj : Object = new Object();
var myArr : Array;
myObj.arr = myArr;
function populateViaRef(obj : Object) : void {
obj.arr = new Array();
for(var i : Number = 0; i < 10; i++)
obj.arr[i] = i;
}
populateViaRef(myObj);
for(var i : Number = 0; i < 10; i++)
trace(myObj.arr[i]);
答案 3 :(得分:1)
在ActionScript 3.0中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于原始数据类型的对象(包括Boolean,Number,int,uint和String)具有特殊的运算符,使它们的行为就像它们按值传递一样。 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html
在Java中,参数按值传递。 http://javadude.com/articles/passbyvalue.htm