我有一個類似於C#String.Format方法的「格式」方法,它具有以下簽名:將可選參數(... rest)傳遞給在AS3中接受可選參數的另一個方法
在一類命名的StringTools:
/**
* Formats a string, based on C# String.Format method.
* @param raw A string with numbered tokens, such as "{0}, {1}"
* @param rest Values that replace the numbered tokens in raw.
*/
public static function format(raw:String, ...rest:*):String;
StringTools.format( 「{0},{1}」, 「你好」, 「世界」)返回預期字符串 「你好,世界」。現在,我試圖讓我的日誌類使用這種方法,但我無法通過可選變量傳遞。在日誌類的方法的簽名是:
public static function infof(raw:String, ...rest:*):String;
如果我通過「休息」直接進入StringTools.format(原始,休息),它在通過作爲一個數組,而不是作爲一個系列的參數,所以如果我將它稱爲liks this:infof(「{0},{1}」,「Hello」,「World」),我會得到字符串「Hello,World,{1}」,因爲它會用第一個標記替換整個值的數組。
我還試圖構建一個參數數組,並調用該方法是這樣的:
var collectArgs:Array = [raw];
for (var i:Number = 0; i < rest.length; i++)
{
collectArgs.push(rest[i]);
}
var callFunction:Function = StringTools.format.call;
trace(callFunction.apply(null, collectArgs));
然而,這種痕跡「世界6」。所以,它看起來像參數被移動。所以,我嘗試將collectArgs初始化爲[null,raw],然後再次獲得「Hello World,6,數字爲{1}」。
我做錯了什麼?將可選參數從一個需要可選參數的方法傳遞給另一個需要可選參數的方法的正確方法是什麼?
謝謝!
如果將callFunction更改爲StringTools.format而不是StringTools.format.call,則不需要「null」。 http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Function.html#call%28%29 – sberry 2010-02-03 18:23:05