Почему типизированные необязательные аргументы не могут иметь значение по умолчанию Null? - PullRequest
6 голосов
/ 16 июня 2009

В ActionScript 3, когда вы объявляете необязательный аргумент, присваивая ему значение по умолчанию, значение null не может использоваться для типизированных аргументов.

function Action(Param:int=null){
    // 1184: Incompatible default value of type Null where int is expected.
}
function Action(Param:int=0){
    // No compiler errors
} 

Есть ли обходные пути для этого или значения общего назначения, которые могут применяться ко всем типам данных?

Ответы [ 3 ]

9 голосов
/ 16 июня 2009

Вы можете изменить свой int на Number, а затем установить его на NaN, который является специальным числом, которое означает «не число», и это может представлять ваше нулевое состояние для Number.

Чтобы проверить, является ли что-то NaN, вы должны использовать функцию isNaN (), а не val == NaN, иначе вы не получите то, что ожидаете.

function Action(param:Number = NaN) : void {
    trace(param);
}

Для всех других объектов вы можете установить их в null, но «примитивные» числа обрабатываются по-другому в Actionscript.

5 голосов
/ 16 июня 2009

int переменные не могут быть нулевыми, поэтому вы получаете эту ошибку, только ссылочные типы, такие как объекты, могут быть пустыми

Вместо этого вы можете использовать NaN в качестве специального числа вместо нуля. Если вы хотите проверить, является ли что-то NaN, используйте функцию isNaN.

0 голосов
/ 18 июня 2009

Вы также можете включить флаг в сигнатуру метода, чтобы избежать повышения параметра с int на число:

function whatever(intProvided:Boolean = false, someInt:int = 0):void
{
    if(intProvided)
        doSomeStuff();
}
...