実行時に ActionScript 3 の無名関数のシグネチャを確認する方法はありますか?
他の関数に引数として渡されたオブジェクトを検証Function
し、それらが正しい数の引数 (正しい型) を受け入れ、正しい型の値を返すことを確認したいと思います。
flash.utils.describeType()
無名関数の場合、この情報は返されないようです。
実行時に ActionScript 3 の無名関数のシグネチャを確認する方法はありますか?
他の関数に引数として渡されたオブジェクトを検証Function
し、それらが正しい数の引数 (正しい型) を受け入れ、正しい型の値を返すことを確認したいと思います。
flash.utils.describeType()
無名関数の場合、この情報は返されないようです。
ランタイムが無名関数を反映できるようには見えませんが、これは残念です。
無名関数は (おそらく定義により) としてマークされdynamic
ます。互換性のない型を無名関数に渡しても、エラーはスローされません。型の不一致は、可能な限り黙ってキャストされます。たとえば、パラメーター"minotaur"
としてのようなものを渡すと、 (ゼロ) が生成されます。uint
0
本当にオーバーエンジニアリングしたい場合は、すべての OO を取得できます。無名関数を受け入れる代わりに、適切な関数シグネチャを含むインターフェイスを宣言し、そのインターフェイスを実装するオブジェクトを受け入れることができます。
public interface IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType;
}
そして、関数をオブジェクトにパッケージ化するだけで済みます:
public class ConcreteCallback implements IFancyCallback {
public function fancyFunction(frog:Frog, princess:Girl):UsefulReturnType {
princess.kiss(frog);
return new UsefulReturnType("jabberwocky");
}
}
多くのコード オーバーヘッドが発生する可能性があります。持つ予定のコールバックの数、作成者、anon 関数の署名が間違っていた場合の深刻度によって異なります。
あなたが解決しようとしている問題について、もっと教えていただけますか?
大まかな概算として、長さプロパティを使用してパラメーターの数を確認できます。たとえば、次のようになります。
function doStuff(callback:Function) {
trace(callback.length);
}
無名関数の引数を列挙する方法を知りません。もちろん、ArgumentError をキャッチした後で検証することもできます。