Объявление необязательного аргумента типа int и проверка его существования - PullRequest
0 голосов
/ 06 августа 2011

В ActionScript 3 вы можете объявить необязательные параметры, например:

function (i:int = 0, s:String = "", o:Object = null):void { }

Таким образом, вы можете проверить, передали ли пользователь параметры s и o, потому что вы можете проверить пустую строку или нулевой объект if (s&& o) ...

Но как вы позволите int быть действительно необязательным?Что если все значения для i действительны, включая 0, отрицательные и положительные целые числа?А что, если вы хотите ввести в действие целое число (а не использовать Number?)

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

Я пытаюсь реализовать запас (top:int, right: int, bottom: int, left: int) метод, который позволяет указывать значение right, bottom и left необязательно.Есть мысли?

Ответы [ 3 ]

2 голосов
/ 06 августа 2011

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

function margin(top:Number, right:Number = NaN, bottom:Number = NaN, left:Number = NaN) {
    // Then here test with isNaN(right), isNaN(bottom), etc.
}
2 голосов
/ 06 августа 2011

Вы можете использовать либо int.MAX_VALUE, либо int.MIN_VALUE.Смотри документацию здесь .

0 голосов
/ 07 августа 2011

Если допустимы все возможные значения int (т.е. вы не можете указать -1 как специальное значение «не указано»), то вы не сможете использовать тип данных int.

Мое предложение таково (основываясь на ответе Лорана):

Определите тип как Number=NaN и проверьте его существование с помощью isNaN().

Если пользователь указал значение, преобразуйте его в int, в противном случае присвойте ему значение по умолчанию.

function margin(top:Number, right:Number = NaN, bottom:Number = NaN, left:Number = NaN) {
    // Then here test with isNaN(right), isNaN(bottom), etc.
    if (isNaN(right))
    {
        right = DEFAULT_MARGIN;    // some default value.

        // Any other logic here...
    }
    else
    {
        // Enforce integer values.
        right = int(right);    // or use Math.floor(right);
    }
}

Вы также можете использовать троичный оператор, чтобы уменьшить количество строк:

function margin(top:Number, right:Number = NaN, bottom:Number = NaN, left:Number = NaN) {
    // Then here test with isNaN(right), isNaN(bottom), etc.

    // This is equivalent to the example above:
    right = isNaN(right) ? DEFAULT_MARGIN : int(right);
}
...