PDA

Просмотр полной версии : Приведение типов


razordron
03.06.2008, 02:13
У меня есть строка,содержащая число.Есть ли функция принудительного приведения типа к числу?спасибо

Vektor
03.06.2008, 03:12
var sStr:String = "10";
Number(sStr);

etc
03.06.2008, 10:51
Vektor, от вашего кода sStr числом не станет.

Vektor
03.06.2008, 12:09
Значит trace врет.
Сам не раз пользовался, работает отлично.
var sStr:String = "10";
var nNum1:Number = 10;
var nItog:Number = nNum1+sStr;
trace(nItog);
//Type mismatch in assignment statement: found String where Number is required.
var nNum:Number = Number(sStr);
var nItog1:Number = nNum+nNum1;
trace(nItog1);
20;
trace(typeof (sStr));
string;
trace(typeof (nNum));
number;

iNils
03.06.2008, 12:28
Значит trace врет.Не врет. В первом коде код "Number(sStr)" уходил в пустоту.

Alex_beginner
03.06.2008, 12:55
Vektor! А чему Вы удивляетесь! Само по себе приведение типов - Number(sStr) ничего не делает!!!

Цитирую Колина Мука (по мнению большинства авторитетнейший автор), стр.77, абзац 8 строка снизу:

Приведение не меняет класс объекта. Оно просто указывает компилятору на необходимость интерпретировать объект или элемент данных так, как будьто это экземпляр заданного типа

etc
03.06.2008, 12:57
Vektor! А чему Вы удивляетесь! Само по себе приведение типов - Number(sStr) ничего не делает!!
Не путайте конвертацию и приведение.

Vektor
03.06.2008, 13:06
Извиняйте, не дописал первый пример, думал сам догадается.

Alex_beginner
03.06.2008, 13:45
__etc! А можно по подробнее про конвертацию. А то я "темнота" ничего не слышал про это.

etc
03.06.2008, 13:47
Пример конвертации строки в число был написан выше.

Alex_beginner
03.06.2008, 14:24
__etc! С такой терминологией (конвертация) я незнаком. Я знаком с термином преобразование типов. Встроенные классы String, Array, Number итд имеют функции с таким же именем. Функции String(), Number(), Boolean(), Array() осуществляют преобразования данных. Синтаксис этих глобальных функции аналогичен синтаксису операции приведения. Именно поэтому, они маскируют приведение типов из-за чего для этих типов данных оно становится невозможным.
Однако запись Number(sStr) также не изменит тип sStr. Об этом и говорил iNils.

etc
03.06.2008, 15:07
Конвертация и преобразование суть одно и тоже. Приведение не проводит конвертации. Ни конвертация, ни приведение не изменяют исходных данных.
В AS3 приведение и конвертация разделены, слава богу. Т.е. синтаксически они отличаются, но работает и старый вариант с одинаковым синтаксисом.

Alex_beginner
03.06.2008, 15:28
__etc!
Конвертация и преобразование суть одно и тоже. Приведение не проводит конвертации. - две взаимоисключающие фразы.
В предыдущем посте я разъяснил, что приведение и преобразование типов встроенных классов не одно и тоже, потому, что приведение в этом случае "маскируется" глобальными функциями встроенных классов - Array(), Nymber(), String() итд. Все дело в приоритете вызова этих глобальных функций перед приведением.

Пример. Предположим, что имеется объект-массив:
var obj:Object = [1,2,3];

Чтобы привести obj к типу Array, теоретически нам следовало бы поступить так: var arr:Array = Array(obj);
Но попытка приведения к типу Array, к сожалению, приводит к преобразованию данных и возвращает новый массив [1,2,3]:
var arr:Array = Array(obj);
trace(arr[0]);выведет 1,2,3
trace(arr[1]);выведет undefined
trace(arr[2]);выведет undefined

etc
03.06.2008, 15:33
__etc!
- две взаимоисключающие фразы.
Приведение и преобразование — разные вещи. Нет ничего взаимоисключающего. Приведение — объяснение компилятору, с объектом какого типа он работает, т.е. кастинг. А преобразование или конвертация — прямое изменение типа данных.
Мне не нужно ничего разъяснять, спасибо.

Alex_beginner
03.06.2008, 15:39
Да не! Вы не поняли! Вы написали сначала
Конвертация и преобразование суть одно и тоже.
а потом следующее предложение
Приведение не проводит конвертации.
а теперь пишите
Приведение и преобразование — разные вещи.
Давайте уже определимся это суть одно и тоже или все таки нет?

etc
03.06.2008, 15:46
Три слова:

1) Приведение;
2) Преобразование;
3) Конвертация.

Второе и третье по сути одно и то же. Первое отношения ко второму и третьему не имеет.

Alex_beginner
03.06.2008, 15:52
Вот теперь мне все ясно. Спасибо.

iNils
13.06.2008, 15:42
А какое значение возращает SWFAddress.getParameter("fa") ?