Il ne semble pas que le runtime vous permette de réfléchir sur des fonctions anonymes, ce qui est dommage.
Les fonctions anonymes sont (peut-être par définition) marquées dynamic
. Si vous passez un type incompatible dans une fonction anonyme, aucune erreur n'est levée. Toute incompatibilité de type sera silencieusement moulée du mieux possible. En passant quelque chose comme "minotaur"
comme un paramètre uint
donnera 0
(zéro), par exemple.
Si vous voulez vraiment le sur-concevoir, vous pouvez obtenir tous les OO dessus. Au lieu d'accepter des fonctions anonymes, vous pouvez déclarer une interface qui contient la signature de fonction appropriée et accepter les objets qui implémentent cette interface.
public interface IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType;
}
Et votre fonction serait tout simplement être emballé dans un objet:
public class ConcreteCallback implements IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType {
princess.kiss(frog);
return new UsefulReturnType("jabberwocky");
}
}
pourrait avoir le potentiel de créer beaucoup de frais généraux de code. Dépend du nombre de rappels que vous avez l'intention d'avoir, de qui va les faire, et de la gravité de la situation si la signature de la fonction anon était incorrecte.
Pouvez-vous partager plus sur le problème que vous essayez de résoudre?
Hey hasseg, vous devriez envisager d'ajouter votre commentaire sournois comme une réponse à ce problème: "laisser l'appel jeter une ArgumentException" et l'attraper. C'est une solution très pragmatique si vous voulez juste appeler la fonction si elle est valide. – aaaidan