2012-04-09 42 views
0

如何將未評估的(和/或可能未定義的)變量用作函數的參數?例如:將未評估的變量作爲參數傳遞

function myFun(a:int):void { 
    a = 5; 
} 

如果你熟悉數學這將是等同於:

f[a_Integer]:=a=5 
Attributes[f]={HoldAll}; 

的核心想法是,它是變量的名字本身,我想傳遞給函數,而不是與變量名稱關聯的當前值。

回答

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你可以得到它的名字。如果它是一個本地變量,你不能,原因可能與效率有關(在編譯階段該名稱會丟失)

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 
    } 
} 

不是傳遞的值,我傳遞是在在被叫方的範圍評估的調用範圍內綁定的功能。