![]() |
Вопрос про доступ к свойствам объектов, или ассоциативные массивы
Привет!
Как облегчить такую конструкцию? Код AS3:
|
Nмерный массив это круто, а смысл (задача какая)?
|
Приходят данные произвольной структуры, надо с ними работать.
А в AS3 нет средств, позволяющих лаконично написать такой код? Надо сделать сеттер и геттер. Первый получает ключ массива произвольной глубины (land.town.tower.room...) и значение, создает указанный элемент. Второй получает ключ, и возвращает значение по нему. Как указывать на элементы объекта? Страшный сеттер Код AS3:
|
Хеш?
Код AS3:
|
Хеш. Но вот так не работает:
Код AS3:
Коллеги, можете проверить? |
stack['one.two.three.four.five'] то же самое что и stack[key]
return stack['one.two.three.four.five'] только так. Добавлено через 1 минуту stack.one.two.three.four.five это какой-то динамический ад. |
Код AS3:
for each (letter in one.two.three.four) - будет работать? |
Цитата:
нет |
Не будет.
|
если я начал понимать вашу задачу, то вам нужна рекурсия.
|
Спасиб :)
А как внутри рекурсивного метода создавать ссылку на объект? |
1) Создаете корень,
2) Отдаете внутрь рекурсии корень и нейм. 3) В рекурсии выцепляете имя до первой точки. 4) У переданного корня создаете параметр с таким именем и пихаете в него новый объект. 5) Отдаете созданный объект внутрь рекурсии и остаток от нейма. 6) Переходите в 3 пункт //точнее уже не вы. Повторяете 2-6 для всех неймов. Корень один. Добавлено через 53 секунды а! Объект должен быть динамический. И еще значение пихать надо. |
ОЗУ скушает :(
А ссылки на объекты можно создавать? Плохо представляю, как сделать иначе. |
Рано вы об ОЗУ думаете. Если у вас есть объект (не "простой" String, int и т.д.), то значит у вас есть ссылка на него.
|
Если честно, плохо представляю, как ссылаться на такой объект.
|
Вы пространные вопросы задаете. Я даже не могу связать с задачей в первом сообщении.
var o:Object = new Object(); о - ссылка на объект. |
Код AS3:
|
Простите, не туда...
|
2 Ленок
Я бы попробовал данные свести к XML структуре. То что вы пытаетесь обработать очень похоже на простейшее дерево. |
Цитата:
Код AS3:
|
Код AS3:
Надо так: Код AS3:
|
Ну проще throw new ArgumentError в else запихать.
|
Цитата:
А как сделать сеттер? Может быть у кого-нибудь есть идеи? |
А он вам так нужен, сеттер? Вызов функции столько же места занимает:
foo.bar = 100; foo.bar(100); |
Цитата:
Код AS3:
Код AS3:
Мне надо, чтобы итерировал. С костылями в начале темы и с удачным геттером все нормально. Осталось придумать сеттер. |
Зачем вам именно в таком формате? Если вы не можете зарание планировать, и вам так сильно хочется чтобы именно сеттер: есть Proxy класс, в котором вы можете реализовать себе такое. Ну только, пока будете реализовывать прийдет понимание, что проще было без него, функциями ограничится. Но дело ваше.
Т.е. реализовывая это в Proxy вы поймете, что обращение к такому свойству сопряжено с кучей накладных расходов (за динамику нужно платить), и что в итоге схема типа object.set(value, ...fieldConsituents); get / find / each вам будет дешевле организовать, чтем воплотить в жизнь интерфейс, в котором еще и свои баги есть. |
От сервера приходят данные - игровой мир. Он в доску динамичен. Сервер присылает его по частям, в зависимости от ситуации и местоположения. Клиент, соответственно, его отрабатывает.
Формат предусматривает как произвольные данные в строковом формате, ассоциативные массивы, а также колбеки. Некоторые условно произвольные фрагменты данных необходимо итерировать для обработки на клиенте. Клиент в процессе работы дополняет копию этих данных, изменяет и удаляет... Короче, делает полноценный CRUD. Часть из них еще и возвращает. Как это решено сейчас. 1. Такое решение было применено в прототипе. Формирование данных в нужной структуре полностью на сервере. Когда клиенту нужно изменить что-то в данных - он просит об этом сервер. Добрый PHP делает, что просили, и посылает пачку обновленных данных. Клиент кушает присланное. 2. Решение, примененное в альфе - в начале этой темы. Оба решения работают. Не нравится: а. Костыли, б. Ограничения. По геттеру решение найдено, и оно уже прошло проверку боем. Осталось придумать сеттер. В AS не сильна, только что начала его изучать, простите :) |
| Часовой пояс GMT +4, время: 23:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.