Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как отличить int от Number (http://www.flasher.ru/forum/showthread.php?t=114688)

MerlinTwi 06.08.2008 11:50

Как отличить int от Number
 
Код:

var a:int = 2;
var b:Number = 2;

trace(a is int); // true
trace(b is int); // true

trace(a is Number); // true
trace(b is Number); // true

trace(typeof(a)); // number
trace(typeof(b)); // number

Собственно вопрос, как определить, что переменная "a" имеет тип int, а переменная "b" тип Number, не зависимо от значения, присвоенного переменной.

etc 06.08.2008 13:43

Код:

var a:int = 2;
var b:Number = 2;
trace(describeType(this).variable.(@name=='b').@type);

Шутка, безусловно. А вообще, определять надо тип не у значения, а тип самой переменной, но не вижу никаких способов это сделать.

wvxvw 06.08.2008 14:15

Код:

var a:Number = 2;
var b:int = 2;
function checkInt(i:int, n:Number):Boolean
{
        i *= Math.PI;
        n *= Math.PI;
        return i == n;
}
trace(checkInt(b, a));

Ну еще такой вариант :D

Dima_DPE 06.08.2008 14:15

Есть одна шальная идея, правда работает вроде, но не "не зависимо от значения, присвоенного переменной"
Код:

var i:int = 2; // эту переменную надо проверить
var t:Number = i; //это временная
i+=0.5; // прибавим, а потом отнимим
trace(i == t+0.5); // false - значит i - int
i-=0.5; // отнимаем что прибавляли
// вот только i тут будет равна 1 =(, но думаю это поправимо

а если так
Код:

var i:Number = 2;
var t:Number = i;
i+=0.5;
trace(i == t+0.5); // true- значит i - number
i-=0.5;


etc 06.08.2008 14:24

Цитата:

Сообщение от wvxvw (Сообщение 756594)
Код:

var a:Number = 2;
var b:int = 2;
function checkInt(i:int, n:Number):Boolean
{
        i *= Math.PI;
        n *= Math.PI;
        return i == n;
}
trace(checkInt(b, a));

Ну еще такой вариант :D

Код:

var a:Number = 2;
var b:int = 2;
function checkInt(i:int, n:Number):Boolean
{
        i *= Math.PI;
        n *= Math.PI;
        return i == n;
}
trace(checkInt(b, a)); // false
trace(checkInt(a, b)); // false


wvxvw 06.08.2008 14:28

Естесственно, а что были сомнения? Мы же сравниваем тип аргументов, а не переменных =) я специально в примере подставил int вместо Number, чтобы такого вопроса не возникло.

т.е. trace(checkInt(a, a)); и trace(checkInt(b, b)); тоже выдадут false

MerlinTwi 06.08.2008 14:35

А вопрос был в определении именно типа переменной ;)

wvxvw 06.08.2008 15:23

Ну, тогда только describeType =) uint, int и Number взаимозаменимы и всегда берутся по значению, так что если значение одинаковое, то и переменные будут одинаковыми... поэтому и
Код:

var a:Number = 2;
var b:int = 2;
trace(getQualifiedClassName(a)); //int
trace(getQualifiedClassName(b)); //int


2morrowMan 06.08.2008 19:49

Наверное это оптимизация AS3/FlashPlayer 9.

etc 07.08.2008 00:54

Цитата:

Сообщение от MerlinTwi (Сообщение 756608)
А вопрос был в определении именно типа переменной ;)

Я боюсь, что задача решения в общем случае не имеет, переменная может вообще не иметь определенного типа.


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

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