#struct #racket
#структура #racket
Вопрос:
Предположим, у меня есть этот код Racket:
(struct pos (x y))
(displayln (pos 5 6))
Это отображается #<pos>
. Есть ли способ заставить его отображать имена и значения полей?
С помощью этой #:transparent
опции отображаются значения:
(struct pos (x y) #:transparent)
(displayln (pos 5 6))
Это отображается #(struct:pos 5 6)
, но я также хочу отобразить имена полей ( x
и y
). Есть ли способ отобразить как имена, так и значения полей? Например: #(struct:pos #:x 5 #:y 6)
.
Я ищу что-то похожее на то, как отображаются структуры Common Lisp. Пример Common Lisp:
(defstruct pos x y)
(format t "~A~%" (make-pos :x 5 :y 6))
Это печатает #S(POS :X 5 :Y 6)
.
Ответ №1:
Если вы не хотите использовать сторонние библиотеки, взгляните на самый последний пример make-constructor-style-printer .
Если вы не возражаете против использования сторонних библиотек, вы можете просто использовать Rebellion’s record .