Почему типизированные необязательные аргументы не могут иметь значение по умолчанию Null?

StackOverflow https://stackoverflow.com/questions/1003100

Вопрос

В 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
} 

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

function whatever(intProvided:Boolean = false, someInt:int = 0):void
{
    if(intProvided)
        doSomeStuff();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top