![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 85
|
Все больше к сожалению убеждаюсь, что флеш с трудом годится для разработки полноценных приложений.
В частности, сломал себе мозг, пытаясь понять, почему не работает одна функция, например: function foo(left:Number,width:Number) {
return left+width;
}
//обратите внимание на тип параметров
var _xml=new XML();
_xml.parseXML("<foo left=\"1\" width=\"5\"/>");
//в реальности, конечно, xml грузится снаружи...
var node=_xml.childNodes[0];
trace(node.attributes.left+","+node.attributes.width);
//вы удивитесь, но left действительно = 1, а width = 5
trace(foo(node.attributes.left,node.attributes.width));
//что вы ожидаете увидеть тут? 6? наивные! 15! :)))
первый вопрос - риторический: на фига тогда вообще type hinting флешу, если он не может самостоятельно элементарной операции приведения типов выполнить? и теперь вопрос ПО СУЩЕСТВУ: понимаю, что мои замашки программера тут явно не к месту - как вообще принято такие вещи писать на ActionScript - "правильно" с точки зрения флеша? или надо каждый раз внутри функции принудительно приводить тип? З.Ы. кстати, а как тип вообще приводить? ![]() |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 85
|
приведение типа нашел. все функции теперь расширять?
![]() |
|
|||||
|
проблем ранее тахих не было
![]() либо NaN либо число 3 не дано
__________________
"We Are The Champions My Friends!" Queen |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 85
|
не, ну что делать - понятно, я думал, может есть какой-нибудь ИЗЯЩНЫЙ способ
спасибо! |
|
|||||
|
изящный способ всегда везде строго тип соблюдать и все
изящнее не бывает ![]()
__________________
"We Are The Champions My Friends!" Queen |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
function foo (a:Number, b:Number) {
return a + b;
}
//// false
//trace (foo ("1", "1"));
//// true
//a = "1";
//b = "1";
//trace (foo (a, b));
//// false
//var a:Number = "1";
//var b:Number = "1";
//trace (foo (a, b));
Почему в первом примере у нас ошибка, а во втором нет? Потому, что в первом мы отдаем непосредственно сами значения. А во втором переменные, тип которых мы не определили. А как известно, тип во флеше играет роль только при компиляции, а не во время исполения и флеш также как и раньше производит автоматическое преобразование типов. Это лекго проверить с помощью На выходе мы получаем 2, а не "11" |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 85
|
спасибо! достаточно развернутый комментарий - и главное - ответ на главный вопрос - "зачем флешу type hinting?" - для устранения ошибок на стадии компиляции
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|