Я бы вообще от парсеровских таблиц отказался... ибо они частный случай списка(хеша)
andylars 06.01.2016 19:40
/ 16.01.2016 22:07
Поглядывая на другие языки...
парсеровские таблицы выглядят как атавизм сегодня.
А) усложняют одновременную поддержку разработчку Парсера
B) усложняют жизнь разработчику на Парсере (с постояйнной конвертацией туда-сюда в каждом подручном месте)
Парсеровский hash - перестал быть "кучей", с момента введения
порядка элементов. И теперь это фактически питоновский List (список), а точнее Dict (словарь).
Таблица это частный случай List/Dict элементами которого является одинаковые по структуре подсписки(словари), что и создает плоский массив - ("одинаковость" по структуре закрепляется tuple-ом (кортежем)
И самому универисальному словарю/списку добавить встроенных операций над ним. Минимально достаточное и удобное можно подсмотреть их того же GoLang (который говорит, что просто add/delete - маловато будет)
Вот для List из
https://golang.org/pkg/container/list/Для случая Парсера можно просто добавить атрибут(tupled/table) в конструктор для Dict/List.
Чтобы он работал как таблица.
Причем (не знаю как сейчас) - для таблиц ключ для каждой строки
не нужен, поэтому для гипотетического Parser.Dict
можно опционально не иметь имени ключа, и обращаться в таком случае только по номеру элемента.
Это даст сразу кучу возможностей:
- Унифицирует две частных случая в один =>
Не надо будет делать конвератции туда-сюда.
Один класс и его методы по манипуляции с этой структурой.
- Поля таблицы могут заиметь тип(!) отличный от string (По желанию)
Представим гипотетический код Parser4:
# Назовём - List, потому что короче...
$mytable[
^List::create[
$.nick[
$.class[string]
$.default[noname]
]
$.reg_date[
$.class[date]
$.default{^date::now[]}
]
$.avatar[
$.class[file]
]
][$.tupled(true) $.key[nameless]]
]
Получаем таблицу вида
(n) nick reg_date avatar
0 Ivan <2015..> <profile.jpg>
1 Peter <2016..> <profile2.jpg>
$.tupled(true) просто не дает нам на ходу ломать кортеж и
вставлять значения не сооветствующих классов.
Сейчас таблицы в Парсере это фактически:
Список кортежей с nameless-ключом для строк и классом string
в полях.
- ^string.replace[$hash], G_Z [M] 04.01.2016 05:11
- Я бы вообще от парсеровских таблиц отказался... ибо они частный случай списка(хеша), andylars 06.01.2016 19:40 / 16.01.2016 22:07