J'ai une méthode "format" qui fonctionne de manière similaire à la méthode C# String.Format, avec la signature suivante:Passage des arguments facultatifs (... rest) à une autre méthode qui prend des arguments facultatifs dans AS3
Dans une classe nommée 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}", "Bonjour", "World") renvoie la chaîne "Bonjour, monde" comme prévu. Maintenant, j'essaie de faire en sorte que ma classe de journalisation utilise cette méthode, mais j'ai du mal à passer les variables optionnelles. La signature de la méthode dans la classe d'enregistrement est:
public static function infof(raw:String, ...rest:*):String;
Si je passe « repos » directement dans StringTools.format (brut, repos), il est transmis comme un tableau, et non comme une série de paramètres, donc si je l'appelle comme ceci: infof ("{0}, {1}", "Hello", "World"), j'obtiens la chaîne "Hello, World, {1}", car elle remplace le premier jeton par l'ensemble des valeurs.
J'ai aussi essayé de construire un tableau d'arguments, et appelant la méthode comme ceci:
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));
Cependant, cette trace "du monde, 6". Donc, il semble que les paramètres sont décalés. J'ai donc essayé d'initialiser collectArgs en tant que [null, raw], et j'obtiens "Hello World, 6. Le numéro est {1}" à nouveau.
Est-ce que je fais quelque chose de mal? Quelle est la bonne façon de passer des paramètres optionnels d'une méthode qui attend des paramètres optionnels à une autre méthode qui attend des paramètres optionnels?
Merci!
Vous n'aurez pas besoin de "null" si vous remplacez callFunction par StringTools.format au lieu de StringTools.format.call. http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Function.html#call%28%29 – sberry