0

Adobe Array docの例はあまり直感的ではありません...

Cardプロパティstrとを持つオブジェクトがある場合、特定の値visibleを持つ可視カードを探すこのコードをどのように書き直せばよいでしょうか?str

FOUND:
for each (var str:String in newHand) {
    for each (card in hand) {
        if (card.visible && str == card.str)
            continue FOUND;
    }

    // there is a new card - redraw the whole hand
    redrawHand(owner);
    break;
}
4

1 に答える 1

2

クラスのsome(), every()(およびforEach()) メソッドには 2 つのパラメーターがあります。Array

  • callback各アイテムで実行される関数。基準に基づいて true または false を返す必要があります
  • thisObjectコールバック関数に指定できるオプションのオブジェクトです。関数内では、thisキーワードを使用してオブジェクトを参照できます。このパラメーターを省略すると、コールバック関数でクロージャーを形成できます。

コールバック関数のシグネチャは次のとおりです。

private var callback:Function = function(currentItem:Object, currentIndex:int, theEntireArray:Array):Boolean
{
    // your logic here returns true/false based on your critera
}

あなたのシナリオでは、おそらく次のsome()ような方法を使用できます。

private var comparisonString:String;

private function showTheExampleCode()
{
    for each (var str:String in newHand)
    {
        // comparisonString will be used in the closure
        // maybe you can just use str in the closure instead?
        comparisonString=str;
        if (hand.some(callback))
        {
            // at least one match was found, do something
        }
    } 
}

private var callback:Function(currentItem:Object, currentIndex:int, array:Array):Boolean
{
    // current item is a Card object (you probably do not have to cast it)
    return Card(currentItem).visible && Card(currentItem).str == comparisonString;
}
于 2012-08-11T19:21:20.250 に答える