![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2009
Сообщений: 56
|
Можно ли как-то определить toString у Vector?
Vector.prototype.toString не прокатывает |
|
|||||
|
__________________
adobe AS3 manual |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 56
|
|
|
|||||
|
Переопределите у каждого объекта его toString, и вызывайте потом встроенный toString у вектора
__________________
adobe AS3 manual |
|
|||||
|
Можно сделать через Proxy наследника, но интересно бы узнать зачем?
Единственным полезным примененим таких переопределений я бы посчитал развер рассылку событий об обновлении данных, а для toString, почему неудобно просто использовать статическую утилиту MyUtils.vectorToString(value:Vector.<*>); ? Вот например наследник от Vector.<Point>. Сохраняяет все мотоды Vector, но переопределяет toString; МОжно подумать еще над передачей типа. package { import flash.display.Sprite; import flash.geom.Point; public class ProxyExample extends Sprite { public function ProxyExample() { var vector:ProxyVector = new ProxyVector(); vector.push(new Point(Math.random(), Math.random())); vector.push(new Point(Math.random(), Math.random())); vector.push(new Point(Math.random(), Math.random())); vector.push(new Point(Math.random(), Math.random())); vector.push(new Point(Math.random(), Math.random())); trace(vector.length);//Методы Vector сохранились trace(vector.toString()); /*Выводит : item [0] = (x=0.5526889930479228, y=0.4928265390917659) item [1] = (x=0.007704821415245533, y=0.5104764206334949) item [2] = (x=0.5938579649664462, y=0.913416794501245) item [3] = (x=0.19566342374309897, y=0.6506094681099057) item [4] = (x=0.4772168640047312, y=0.5084680668078363) */ } } } import flash.geom.Point; import flash.utils.Proxy; import flash.utils.flash_proxy; dynamic class ProxyVector extends Proxy { private var _item:Vector.<Point>; public function ProxyVector() { _item = new Vector.<Point>(); } override flash_proxy function callProperty(methodName:*, ... args):* { var res:*; if (methodName.toString() == 'toString') { var output:String = ""; var len:uint = _item.length; for (var i:uint = 0; i < len; i++) { output += 'item [' + String(i) + '] = ' + _item[i].toString() + "\n"; } res = output; } else { var _itemObj:Object = _item as Object; res = _itemObj[methodName].apply(_item, args); } return res; } override flash_proxy function getProperty(name:*):* { return _item[name]; } override flash_proxy function setProperty(name:*, value:*):void { _item[name] = value; } } Мне кажется лучше просто завернуть его в обертку, и обращаться просто на точку длиннее vectorCont.item[i]; Прикольно как в разных языках по разному происходит эволюция, то от чего в AS с трудом избавились, в других языках воспринимают за достижение. Или прикольно было набдюдать как СилверЛайтчики гордились тем что у них компонент на векторах, хотя без строкхинтинга с небрежно размазанными шрифтами, а во флеше очень радовлись когда появилась возможность работы с bitmapData вместо вектора ![]()
__________________
... Последний раз редактировалось Александр Мостовой; 08.04.2013 в 15:37. |
|
|||||
|
Вопрос к rs7 - что вы хотите получить на выходе из toString у вектора ?
__________________
adobe AS3 manual |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|