5

Actionscript でインライン クロージャがめったに使用されないのはなぜですか? それらは非常に強力で、非常に読みやすいと思います。それらを使用している人はほとんどいないので、間違ったコードを見ているだけかもしれません。Google は Google Maps API for Flash サンプルでそれらを使用していますが、私がそれらを見た唯一の場所だと思います。

それらを定義するスコープ内のローカル変数にアクセスでき、ロジックを 1 つのメソッドに保持し、名前を考え出さなければならない多くの関数にならないようにするため、私はそれらを好みます。

それらを使用する際のキャッチはありますか?C# とほとんど同じように機能しますか。

私は実際、AS3 がそれらをサポートしていることを発見したばかりで、AS# で非推奨になっていると読んだと思っていたので、かなりイライラしています。だから私はそれらを使用することに戻りました!

private function showPanel(index:int):void {    

_timer = new Timer(1000, 1);        
_timer.addEventListener(TimerEvent.TIMER, function(event:Event):void 
{
    //  show the next panel
    showPanel(index++);
});
4

3 に答える 3

3

注意すべき最大の問題は、多くの場合、'this' がインライン クロージャで定義されていないことです。「これ」を設定できる場合もありますが、使用方法によっては、常に正しい「これ」を設定できるとは限りません。

しかし、私が取り組んできた Flex コードのほとんどは、コード全体にインライン クロージャーが蔓延していると言えます。なぜなら、コールバックが作業を完了する唯一の方法であり、多くの場合、まったく別の関数を引き出す必要がないからです。 .

ネストされた関数が多すぎる場合は、関数内の Function 変数を使用して少し分割します。これは、関数にラベルを付けながら、インライン クロージャのいくつかの特性 (ローカル変数へのアクセスなど) を維持することで、少し整理するのに役立ちます。

お役に立てれば。

于 2008-10-17T21:34:41.313 に答える
2

もう1つの問題は、クロージャに関してはガベージコレクションが壊れていることです(少なくともFlash 9では)。(字句の観点から)特定のクロージャの最初のインスタンスは、スコープチェーン内のクロージャによって参照される他のものと一緒にガベージコレクションされることはありません。

于 2008-10-27T22:30:23.127 に答える
1

もともとこれをやりたくない理由を見つけましたが、詳細を忘れていました:

http://livedocs.adobe.com/flex/3/html/16_Event_handling_6.html#119539

(これはミッチが言及したものです-「this」キーワードが範囲外である限り)

これがアドビの答えですが、「これ」よりもローカル変数を参照する必要がある可能性がはるかに高くなります。

他の人はアドビの推奨事項をどのように解釈していますか?

于 2008-10-17T21:43:33.060 に答える