1

是否可以将参数传递给 ActionScript 3 中的方法 ByRef(或 out 等)?

我在类的顶部有一些全局范围的变量,如果它为 == null,我的方法将填充该变量。

我传入了需要填充的变量,但到目前为止,我的努力已经返回了一个本地填充的变量,而它的全局范围版本仍然为空。

传递给我的方法的变量会有所不同,因此我无法在我的方法中对其进行硬编码并简单地设置它。

4

4 回答 4

4

默认情况下,ActionScript 3 通过引用传递参数,如 Java - 除了原始类型。但是你试图让它做的不是通过引用传递。传入的参数是对对象的引用(在它不是原始类型的情况下),您可以在函数内部对其进行修改。

但是,回答你的问题。这是一个解决方案:

function populateIfNull(variableName, value){
    this[variableName] = this[variableName] || value
}

您可以使用如下:

populateIfNull('name', 'Bob')
populateIfNull('age', 20)
于 2009-08-26T15:33:55.727 回答
1

AS3 没有按引用传递(它在这方面类似于 Java,因为它按值传递引用)。

如果您通过将对象包装在另一个对象中来控制客户端代码,则可以模拟类似的事情:

var myObj = null;
myFun({ a: myObj });
function (param) {
  if (param.a == null) {
    param.a = "Hello";
  }
}
于 2009-08-26T15:31:52.983 回答
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]);
于 2010-08-20T11:23:03.797 回答
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

于 2013-04-30T04:22:06.900 回答