ActionScript 3에서 변수 BYREF 전달 3
-
20-09-2019 - |
문제
Actionscript 3의 Method ByRef (또는 Out 등)에 매개 변수를 전달할 수 있습니까?
내 클래스 상단에 전 세계적으로 범위가 지정된 변수가 있으며 == null이면 내 메소드가 해당 변수를 채 웁니다.
나는 채워져야 할 변수를 전달하지만 지금까지 내 노력은 국부적으로 인구가 많은 변수를 반환하여 전 세계적으로 스코핑 된 버전의 IT NULL을 남겨두고 있습니다.
내 메소드로 전달되는 변수는 다양하므로 내 메소드에서 하드 코드를 할 수없고 간단히 설정합니다.
해결책
ActionScript 3은 원시 유형을 제외하고 Java와 같이 기본적으로 참조별로 매개 변수를 전달합니다. 그러나 당신이 그것을하려고하는 것은 참조별로 전달되지 않습니다. 전달 된 매개 변수는 객체 (원시 유형이 아닌 경우)에 대한 참조로, 함수 내부를 잘 수정할 수 있습니다.
그러나 귀하의 질문에 답변합니다. 다음은 해결책입니다.
function populateIfNull(variableName, value){
this[variableName] = this[variableName] || value
}
다음과 같이 사용할 수 있습니다.
populateIfNull('name', 'Bob')
populateIfNull('age', 20)
다른 팁
AS3에는 참조 별 패스가 없습니다 (이와 관련하여 Java와 유사합니다.
다른 객체에서 객체를 감싸서 클라이언트 코드를 제어하면 비슷한 것을 시뮬레이션 할 수 있습니다.
var myObj = null;
myFun({ a: myObj });
function (param) {
if (param.a == null) {
param.a = "Hello";
}
}
물체를 사용하십시오.
예 :
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]);
ActionScript 3.0에서는 모든 값이 객체로 저장되므로 모든 인수는 참조로 전달됩니다. 그러나 부울, 숫자, int, uint 및 string을 포함하는 원시 데이터 유형에 속하는 객체는 마치 가치를 통과 한 것처럼 행동하게하는 특수 연산자가 있습니다.http://help.adobe.com/en_us/actionscript/3.0_programmingas3/ws5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html
Java에서 인수는 가치로 통과됩니다.http://javadude.com/articles/passbyvalue.htm