Я пишу свое первое приложение для набора текста/рэкета, которое представляет собой приложение cli, которое задает вам некоторые статистические вопросы о вашем дне, например, сколько часов вы спали предыдущей ночью, сколько вы съели, сколько чашек кофе вы выпили и т. д. Приложение делает это, сначала отображая вопрос, а затем ожидая ввода пользователя с помощью функции read
. Собранная информация затем помещается в struct
с предопределенными полями.
struct
выглядит так:
(struct: day-stats
([user-id : Integer]
;; ... 10 more Integer fields
))
Мой подход к этому заключается в том, чтобы сначала инициализировать структуру со значением по умолчанию 0 для каждого поля, а затем обновлять этот «экземпляр» структуры информацией по мере того, как пользователь вводит ее, используя функцию struct-copy
.
Это приводит меня к вопросу, как наиболее элегантно инициализировать структуру значениями по умолчанию? Я создаю макрос, который создает код во время компиляции/анализа, который выглядит примерно так:
(day-stats 0 0 0 0 0 0 0 0 0 0 0)
Или уже есть макрос, который может сделать это, прочитав какое-то свойство в структуре?
ИЗМЕНИТЬ:
Изучив документацию еще немного, я узнал, что есть свойство, которое вы можете установить в структуре для автоматического задания полей. Однако я не могу найти, возможно ли это в typed/racket
. Вот как это выглядит в racket
:
(struct day-stats
([user-id #:auto]
;; ... 10 more Integer fields
)
#:auto-value 0)