【发布时间】:2019-04-12 04:32:28
【问题描述】:
考虑以下球拍代码以获取给定结构的accessors 列表:
#lang racket
(require (for-syntax syntax/parse racket/struct-info racket/list))
(struct point [x y])
;; get the list of accessors from a struct
;; ex. (get point) = '(point-x point-y)
(define-syntax (get stx)
(syntax-parse stx
[(_ struct)
(define struct-info (extract-struct-info (syntax-local-value #'struct)))
(define accessors-list (map syntax-e (fourth struct-info)))
#``(#,@accessors-list)]))
(get point)
使用syntax-local-value,我们可以提取模式变量struct绑定的标识符的值。
使用extract-struct-info,我们可以提取列表形式的结构类型信息(它有6个元素)。从这里可以提取访问器列表(它是列表中的第四个元素)。
问题
如何在非宏级别访问有关结构的信息(如Structure Type Transformer Binding 所示)?上面的两个函数不能直接用于转换器外部的结构,因为该结构是那个时候的过程(并且extract-struct-info 接受struct-info)。
【问题讨论】:
标签: racket