如何使用未评估(和/或可能未定义)的变量作为函数的参数?例如:
function myFun(a:int):void {
a = 5;
}
如果您熟悉Mathematica,则相当于:
f[a_Integer]:=a=5
Attributes[f]={HoldAll};
核心思想是我想要传递给函数的变量名称本身,而不是当前与变量名称相关联的值。
答案 0 :(得分:1)
您可以传递一个字符串。
private function my_fun(name:String):void {
trace(this[name]);
}
使用示例:
public class Main extends Sprite {
public var a:int = 5;
....
public function Main():void {
my_fun("a");
}
根据这些家伙的说法:get string representation of a variable name in as3如果它是一个classe你可以得到它的名字。如果它是一个你不能的局部变量,原因可能与效率有关(名称在编译阶段会丢失)
答案 1 :(得分:0)
解决问题的另一种方法是使用闭包来改变评估范围。
public class A {
public static function myFun(setter:Function):void {
setter(5);
}
}
public class B {
function someOtherFunction() {
var val:Number;
A.myFun(function(v:Number):void { val = v; });
trace(val); // 5
}
}
我传递的函数不是传递值,而是传递一个在被调用者范围内计算的调用范围中绑定的函数。