Как работают функции с несколькими параметрами одного имени?

#actionscript

#actionscript

Вопрос:

Я просматривал код для флеш-игры (ссылка). Однако у меня возникают проблемы с пониманием того, как работают некоторые из этих функций, особенно потому, что некоторые из них имеют определения функций, которые, как я думаю, не могут пройти мимо компилятора.

Ниже приведен некоторый код из TodCommon.as это, по-видимому, противоречит само по себе (или, по крайней мере, использует неправильные соглашения об именовании).

 private static var gFlashingColor:Color = new Color();

final public static function ClampFloat(ClampInt:Number, ClampInt:Number, ClampInt:Number) : Number
{
    if(ClampInt <= ClampInt)
    {
        return ClampInt;
    }
    if(ClampInt >= ClampInt)
    {
        return ClampInt;
    }
    return ClampInt;
}

final public static function ClampInt(gFlashingColor:int, gFlashingColor:int, gFlashingColor:int) : int
{
    if(gFlashingColor <= gFlashingColor)
    {
        return gFlashingColor;
    }
    if(gFlashingColor >= gFlashingColor)
    {
        return gFlashingColor;
    }
    return gFlashingColor;
}


  

Также в коде используется самый странный синтаксис для цикла for-each, который я когда-либо видел (в этом примере в качестве имени параметра также используется имя пакета)

 public function CountPlantByType(com.popcap.flash.framework.resources.fonts:int) : int
{
    var _loc_3:CPlant = null;
    var _loc_2:int = 0;
    var _loc_4:int = 0;
    var _loc_5:* = this.mPlants;
    while(<to complete>)
    {
        _loc_3 = __nextvalue;
        if(_loc_3.mSeedType != com.popcap.flash.framework.resources.fonts)
        {
            break;
        }
        _loc_2  ;
    }
    return _loc_2;
}
  

Это всего лишь несколько примеров вещей, которые, на мой взгляд, выглядят очень странно, и мне трудно их понять. Но все эти функции работают и широко используются во всем коде. Кто-нибудь может объяснить, как работают функции ClampFloat и ClampInt или почему законно использовать имя пакета в качестве параметра? Спасибо

Ответ №1:

Решено. Оказывается, программа, которую я использовал для извлечения этих файлов из SWF, также повредила их в процессе. Использование бесплатного флэш-декомпилятора JPEXS вместо ActionScriptExtractor исправило синтаксис кода.