Я искал documentation для Racket (язык, не типизированный) и не смог решить, возможно ли иметь необязательные аргументы для не изменяемой структуры. Я хотел бы быть в состоянии сделать:Необязательное поле структуры
(struct q-a-website (name interest-value #syntax? some-optional-field))
... (q-a-website "stack-overflow" 42 "My name is Jon Skeet") ...
... (q-a-website "quora" -inf.0) ...
В этом псевдо-примере #syntax?
просто заполнитель, где я подозреваю, что некоторые специальный синтаксис может находиться, чтобы сделать следующее поле необязательно. Есть ли способ сделать вашу повседневную, неизменную, run-of-the-mill структуру необязательными аргументами в базовом Racket?
Уточнение: если структура создается без необязательного параметра, она заполняется значением по умолчанию, которое должно быть предоставлено во время создания. В этом случае эта информация должна содержаться внутри блока (возможно, плохо названного) #syntax?
.
(Примечание: У меня есть оговорки относительно включения struct
тега на этот вопрос, как он упоминает C семейство языков, к которым Ракетка не принадлежит ...)
Можете ли вы немного разъяснить свою желательную семантику? Например: что должно произойти, когда вы запрашиваете необязательное поле для структуры, которая его не имеет? Я думаю, что я направляюсь к простому предложению пользовательского «конструктора», но мы увидим ... –
То же самое, что и Джон. Также рассмотрим наследование. –
@JohnClements Я не уверен, что вы просите, но я ищу значения по умолчанию, которые будут созданы, если поле не указано. Я отредактирую свой вопрос. – BlackVegetable