Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Хочу сделать int=null (http://www.flasher.ru/forum/showthread.php?t=129307)

Psycho Tiger 29.08.2009 14:30

Хочу сделать int=null
 
Для чего?
К примеру,
Код AS3:

function setPosition(xPos:int=null):void{
if (xPos==null) x=Math.round(Math.random()*stage.stageWidth));
else x=xPos;
}

Но компилятор ругается на то, что int нельзя приравнять к null :( (Flex 4 sdk, strict mode).
Заводить второй аргумент как флаг очень не хочется, ровно как и хранить специальное число вроде 666, что
Код AS3:

function setPosition(xPos:int=null):void{
if (xPos==666) x=Math.round(Math.random()*stage.stageWidth));
else x=xPos;
}

Как вариант, можно объявить неопределенное число аргументов, а дальше уже делать всё что хочется, но вариант мне кажется не красивым.
Как быть?

Волгоградец 29.08.2009 14:47

int - это примитивный тип. А null применяется к ссылочным типам. И компилятор не ругается, а выдает предупреждение, но тем не менее присваивает в этом случае значение по умолчанию, т.е. 0.
В твоем случае можно смотреть количество аргументов, передаваемых в функцию.
Код AS3:

function test(a:int = 0):void
{
        trace(arguments.length);
}


Герыч 29.08.2009 15:19

а NaN нельзя задавать по умолчанию? Или просто какое-нито крайнее значение. максимальный/минимальный int

BlooDHounD 29.08.2009 15:30

NaN только для Number.

kup 29.08.2009 19:46

Psycho Tiger, у вас "x" имеет тип Number. Правильнее было бы:

Код AS3:

function setPosition(xPos:Number):void

т.к. все равно у вас, int будет преобразовываться к Number.

А вобще, int.MIN_VALUE и int.MAX_VALUE вам могут помочь. Или просто используйте отрицательное значение.

Psycho Tiger 29.08.2009 20:08

kup, отрицательные значения не катят - я могу поставить объект за сценой, чтобы потом плавно переместить его на сцену. MIN_VALUE - это как подвид "специального" числа, только вероятность его использования у меня стремится к 0. И да, с чего вы взяли что у меня этот класс от наследника DisplayObject`а наследуется? =) Вообще да, но я сеттер переопределил для х, нужно там кое что ещё делать и нужен именно int) Спасибо за отклик.

2Волгоградец: у меня флешка даже не компилируется :) Говорит "явное несоответствие типов" - наверное, очень жесткий стрикт мод стоит какой-то, это в принципе меня радует.
Пожалуй да, arguments.length будет самым лучшим вариантом. Проскользнула мысль, что в любом случае в моём примере оно будет 1, но после захода в тему BloodHounD`а я уверен, что это не так :)
Спасибо всем.

etc 29.08.2009 20:30

Цитата:

Сообщение от Волгоградец (Сообщение 846577)
А null применяется к ссылочным типам.

String типа тоже ссылочный?

wvxvw 29.08.2009 22:17

Со стрингом есть разница... и вообще, изза странных предписаний в ES, с null в AS3 какие-то неоднозначости...
Код AS3:

function f(s:String = ""):void
{
        trace(s);
}
function n(s:String = null):void
{
        trace(s);
}
f(); //
n(); // null


udaaff 29.08.2009 22:57

В документации сказано, что это два разных значения
Цитата:

Значение null не то же самое, что и пустая строка (""), несмотря на то, что оба
эти значения отражают отсутствие каких-либо символов.

CrazyCoder 30.08.2009 17:26

Как показывает мой опыт, правильно - не делать неявных предположений в функциях типа setPosition. Если уж на то пошлО, то Х координата может быть и у объекта не размещённого на сцене и тогда этот код будет просто опасен. Нужно не передавать параметр для if, а решать - вызвать setPosition(x, y) или setPositionRand(stage.width, stage.height) в вызывающей функции.


Часовой пояс GMT +4, время: 01:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.