Syntax 对不同文件中的语法定义使用相同的begin

Syntax 对不同文件中的语法定义使用相同的begin,syntax,racket,Syntax,Racket,我在一个更大的代码中,我需要这样做: 文件\u 1.rkt: #朗球拍 (提供定义类型ref) (需要语法/解析/定义) (从语法开始 (定义类型(生成hasheq))) (定义语法分析器定义类型 [(id类型) (散列集!类型(语法->数据#'id)(语法->数据#'type)) #“(无效)]) (定义语法分析器类型参考 [(id) (writeln(散列引用类型(语法->数据#'id))) #“(无效)]) 文件_2.rkt: #朗球拍 (提供(所有已定义) (需要“文件_1.rkt”)

我在一个更大的代码中,我需要这样做:

文件\u 1.rkt:

#朗球拍
(提供定义类型ref)
(需要语法/解析/定义)
(从语法开始
(定义类型(生成hasheq)))
(定义语法分析器定义类型
[(id类型)
(散列集!类型(语法->数据#'id)(语法->数据#'type))
#“(无效)])
(定义语法分析器类型参考
[(id)
(writeln(散列引用类型(语法->数据#'id)))
#“(无效)])
文件_2.rkt:

#朗球拍
(提供(所有已定义)
(需要“文件_1.rkt”)
(定义类型原子符号)
(类型参考原子)
输出:

符号
文件\u 3.rkt:

#朗球拍
(需要“文件1.rkt”或“文件2.rkt”)
(类型参考原子)
输出:

;哈希引用:找不到键的值
;   关键:原子
; 上下文(普通;要查看更好的errortrace上下文,请使用C-u前缀重新运行):
;   /Applications/racketv8.0/collects/syntax/parse/define.rkt:20:4
;   /Applications/racketv8.0/collects/syntax/wrap modbeg.rkt:46:4
;   /...
似乎对于每个语法扩展
类型
都会再次实例化


我需要为不同的文件共享相同的
类型
。我能做什么?

您真的需要将信息存储在这样的哈希表中吗?一种更简单的方法是在
定义类型
中实际定义
id
,这样您就可以正确地
提供它,而其他模块也可以正确地
要求它

看起来您希望
define type
在编译时出现,因此可以使用
define syntax
创建绑定,并使用
syntax local value
引用它

#lang racket

(provide define-type types-ref)

(require syntax/parse/define)

(define-syntax-parser define-type
  [(_ id type)
   #'(define-syntax id (quote type))])

(define-syntax-parser types-ref
  [(_ id)
   (writeln (syntax-local-value #'id))
   #'(void)])