Haxe-х anonymous structures являются не более чем нетипизированных, организованных коллекций данных. Их структура неизменна после установки, и только значения свойств могут быть изменены. Доступ к массиву (нотация нот) не определен в анонимных структурах - вместо этого используется точечная нотация.
Из-за нетипизированного (динамического) характера анонимных структур они могут иметь negative impact on performance при компиляции статических целей.
Рекомендуется организовывать и печатать анонимные структуры с использованием typedefs и typedef extensions. Это обеспечивает безопасность типов и помогает серверу компиляции подхватывать любые печатные ошибки на ходу.
Чтобы вернуться к точке, то, что вы пытаетесь сделать, лучше всего использовать с помощью maps и typedefs. Карты позволяют хранить правильные пары ключ-значение - как с помощью методов, так и с помощью скобок - и typedefs позволяют вводить структуру данных, обеспечивая безопасность типов.
Имея это в виду, ваш фрагмент кода может быть воссоздан следующим образом:
class Test {
static var data : Map<String, Room> = new Map<String, Room>();
static function main() {
data["R100"] = { monsterCount: 5 };
data["R200"] = { monsterCount: 10 };
trace(data["R100"].monsterCount);
trace(data["R200"].monsterCount);
}
}
typedef Room = {
var monsterCount : Int;
}
Room
теперь тип описывается структурой { "monsterCount": (Int) }
данных и отображается в строковых ключей, обозначающих номера ID.
API карты позволяет вам устанавливать и удалять пары ключ-значение с карты, а также перебирать ключи/значения и многое другое. Обязательно проверьте API docs для получения дополнительной информации.
Edit (2016-07-26)
Ответ предоставляется lordkryss вполне допустимо. Однако есть две основные причины, по которым я не поднял reflection.
- Отражение - это функция времени исполнения, ее использование излишне усложняет ваш код и не предлагает вам желаемого синтаксиса.
- Отражение может быть дорогостоящим и непредсказуемым для разных целей.
Как правило, вам следует лучше двигаться с учетом динамических, а не статических целей. Помните об этом при разработке своего проекта и определении того, какой будет ваша целевая платформа.
Я рекомендую смотреть в сгенерированные источники, чтобы лучше понять влияние отражения. Вы можете использовать официальную песочницу try.haxe.org, чтобы увидеть исходный код JavaScript, генерируемый Haxe 3.2.0. Существует также unofficial sandbox, который также позволяет вам увидеть исходный код JavaScript Haxe 3.3.0-rc.1.
Лично, Я не думаю, что отражение является приемлемым решением вашей проблемы.. Я вижу вашу проблему как одно из поиска соответствующей структуры данных для представления ваших данных. Отражение имеет свое применение, но я бы не рекомендовал его в этом случае.
Спасибо, ребята, все эти ответы являются большими. На данный момент я пришел с ответом LordKryss, потому что его проще всего реализовать, но он вернется и посмотрит на правильную структуру, когда я ее запустил. Спасибо, ребята – Ferrari177