0

次のようなコードで比較関数ジェネレーターの型を宣言する構文は何ですか?

var colName:String = ""; // actually assigned in a loop
gc.sortCompareFunction = function() : ??WHAT_GOES_HERE??
{
   var tmp:String = colName;
   return function(a:Object,b:Object):int { return compareGeneral(a,b,tmp); };
}();
4

2 に答える 2

1

「関数」はデータ型ではありませんか?

于 2008-09-16T17:20:34.777 に答える
0

データ型が何であるかを理解するには、戻り値の意図された結果が何であるかを知る必要があります。compareGeneral のコード ブロックを確認する必要がありますが、これが役立つとはまだ思えません。同じ関数「gc.sortCompareFunction」で2つの戻り値があります。戻り値が値を取得し、同じ関数ブロック内の残りの部分が無視されることを意味するブレークコマンドとして機能するため、これは正しくないと思います。問題は、どの戻り値が意図された戻り値なのかわからないことです。また、フラッシュもそれを認識していることもわかりません。* をデータ型として使用できますが、これは実際には特定の状況でのみ使用する必要があります。この状況では、compareGeneral の値を返すだけの戻り値が 1 つあればよいと思います。

これが compareGenerator である場合、ブール値の TRUE または FALSE を返すか、int 0 または 1 を返す必要があります。前者を使用できます。また、使用する関数を 1 つ減らすことができると思います。私はあなたのコードをすべて見たわけではなく、あなたが何を達成しようとしているのか正確にはわからないので、以下は仮説です。

関数compareGeneral(a:オブジェクト、b:オブジェクト):ブール値
{
   //各オブジェクトに関連付けられたいくつかのプロパティをチェックして、類似性を確認します。
   if(a.someAssignedPropery == b.someAssignedPropery)
   {
      true を返します。
   }
   false を返します。
}
var objA:Object = new Object();
objA.someAssignedProperty = "AS3";
objB.someAssignedProperty = "AS3";

compareGeneral(objA,objB);

この場合、compareGeneral(objA,objB); は true を返しますが、まだ有用なことは何もしていません。ここにあなたがそれを使用する方法があります。true または false の値を返すので、変数のように扱うことができます。

if(compareGeneral(objA,objB)) // if(compareGeneral(objA,objB)) == true) と同じ
{
   trace("一致が見つかりました!");
   //ここで、他の関数を呼び出したり、変数を設定したり、見つかった一致に基づいて機能的に必要なものを設定したりできます。
}
そうしないと
{
  trace("一致するものが見つかりませんでした!");
}

これが、データ型と戻り値を理解するのに役立つことを願っています。あなたが tmp で何をしていたのかはわかりませんが、一般的に値を返す関数はその 1 つのことだけを処理するため、比較関数が 1 つのことを他のものと比較し、それが呼び出しの範囲になることが最善です。 . tmp で必要な機能はすべて、独自の関数またはメソッド内に配置して、必要なときに呼び出すことができます。

于 2008-09-24T06:59:35.130 に答える