firelord
31.01.2007, 16:58
Все больше к сожалению убеждаюсь, что флеш с трудом годится для разработки полноценных приложений.
В частности, сломал себе мозг, пытаясь понять, почему не работает одна функция, например:
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! :)))
несмотря на то, что параметры функции объявлены как Number, флеш без зазрения совести засовывает в них String из XML - ни на что, конечно, не ругаясь, и успешно осуществляет конкатенацию строк вместо арифметической операции :yahoo:
первый вопрос - риторический: на фига тогда вообще type hinting флешу, если он не может самостоятельно элементарной операции приведения типов выполнить?
и теперь вопрос ПО СУЩЕСТВУ: понимаю, что мои замашки программера тут явно не к месту - как вообще принято такие вещи писать на ActionScript - "правильно" с точки зрения флеша? или надо каждый раз внутри функции принудительно приводить тип?
З.Ы. кстати, а как тип вообще приводить? ;)
В частности, сломал себе мозг, пытаясь понять, почему не работает одна функция, например:
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! :)))
несмотря на то, что параметры функции объявлены как Number, флеш без зазрения совести засовывает в них String из XML - ни на что, конечно, не ругаясь, и успешно осуществляет конкатенацию строк вместо арифметической операции :yahoo:
первый вопрос - риторический: на фига тогда вообще type hinting флешу, если он не может самостоятельно элементарной операции приведения типов выполнить?
и теперь вопрос ПО СУЩЕСТВУ: понимаю, что мои замашки программера тут явно не к месту - как вообще принято такие вещи писать на ActionScript - "правильно" с точки зрения флеша? или надо каждый раз внутри функции принудительно приводить тип?
З.Ы. кстати, а как тип вообще приводить? ;)