2010-03-04 7 views
2

Je suis en train de faire quelque chose comme ceci:AS3: Comment forcer les paramètres dans les fonctions de rappel

myFunc(tracer); 

function tracer(message:String):void{ 
trace(message); 
} 

function myFunc(callback:Function):void{ 
callback("Hello"); 
} 

Maintenant, cela fonctionne très bien. Mais comment la fonction myFunc peut-elle savoir si la fonction de rappel donnée accepte le nombre et le type d'arguments corrects dans sa signature?

Je veux éviter que j'appelle quelque chose comme ça quelque part dans mon code:

myFunc(tracer2); 

function tracer2():void{ 
trace("done"); 
} 

function myFunc(callback:Function):void{ 
// Argument mismatch! 
callback("Hello"); 
} 

Est-il possible de faire quelque chose comme ça, afin d'utiliser les avertissements du compilateur/messages d'erreur et éviter ainsi des exceptions à runtime?

// Won't work :-(
function myFunc(callback(message:String):Function):{ 
callback("Hello"); 
} 

Répondre

3

Ma compréhension est que c'est une situation qui ne peut être détectée qu'à l'exécution. AS3 ne propose aucun mécanisme pour ce type de vérification de type. Je suggère que si cela est important, que vous obteniez une vérification à la compilation en passant un objet avec une interface fortement typée plutôt que de simplement passer une fonction, où les informations de type dont vous avez besoin seront perdues.

+0

Dommage :-( Souhaité, AS3 était un peu plus puissant. – Timo

1

Je pense que vous pouvez ajouter un deuxième paramètre dans myFunc qui donnera des informations sur les paramètres qui devraient être envoyés à la fonction de rappel. De cette façon, vous pourriez avoir myFunc(tracer2,"null") en un seul endroit et myFunc(tracer,"String") à un autre endroit.

Je voudrais essayer quelque chose comme

function myFunc(callback:Function, ParamRequest:Array /* of String */):void{ 
} 
Questions connexes