Почему типизированные необязательные аргументы не могут иметь значение по умолчанию Null?
-
05-07-2019 - |
Вопрос
В 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();
}