Получение имен полей структуры данных

я хочу получить имена полей структуры данных. Это возможно? Мой план состоит в том, чтобы написать процедуру toString() для создания дампа заданной структуры данных. Например, я мог бы напечатать все имена полей и значения ds как JSON.


person bensen    schedule 12.02.2021    source источник
comment
замечательная идея. Но не думайте, что это возможно. Только динамические языки, то есть то, что позволяет присваивать тип переменной во время выполнения, предоставляют программе способ вывести список свойств переменной.   -  person RockBoro    schedule 12.02.2021
comment
@RockBoro вы можете быть удивлены, посмотрите мой ответ. ;)   -  person Charles    schedule 12.02.2021
comment
@RockBoro - это неправильно. Нет ничего, что могло бы помешать статически типизированному языку раскрыть свойства переменной во время выполнения. Не все языки со статической типизацией делают это, но это просто дизайнерское решение, а не техническая проблема. Действительно, тот факт, что типы замораживаются во время компиляции, сделал бы это еще проще для статически типизированного языка (если бы он захотел), чем для динамически типизированного (который часто должен).   -  person John Y    schedule 15.02.2021


Ответы (1)


Хотя RPG на самом деле не поддерживает отражение, как, например, C#, за последние несколько лет IBM добавила открытый доступ.

Первоначально открытый доступ работал с кодами операций файлового ввода-вывода. Затем IBM для версии 7.2+ добавила операцию DATA-INTO. -код для разбора в структуру данных. Осенью 2019 г. для версии 7.3+ IBM добавила DATA-GEN код операции для генерации из структуры данных.

Вы можете написать свой собственный парсер или генератор.

Тем не менее, Скотт Клемент любезно предоставил синтаксический анализатор (YAJLINTO) и генератор (YAJLDTAGEN) для своего и Дэвида Руссо исходного порта IBM i с открытым исходным кодом для Еще одна библиотека JSON (YAJL).

person Charles    schedule 12.02.2021
comment
Спасибо большое, посмотрю :) - person bensen; 14.02.2021
comment
@bensen не забудьте пометить ответ как принятый, если считаете, что он ответил на ваш вопрос. - person Charles; 15.02.2021