我有一个文件“exceptions.rkt”
#lang racket
(module exceptions racket
(provide Macro/Raise Macro/Assert Macro/Assert* Macro/Domain-Assert)
; ... Definitions for provided symbols...
) ; End of module, end of file
Macro/Raise
等实际上不是使用 define-syntax 定义的宏,它们只是使用 syntax-rules
生成并分配了名称的一元函数
(define Macro/Raise
(syntax-rules ()
; ... body not important ...
))
在与“exceptions.rkt”相同的文件夹中,我有一个文件“tables.rkt”。
#lang racket
(module tables racket
(require "exceptions.rkt")
(define-syntax Assert Macro/Assert)
; ... more stuff...
) ; End of module, end of file
但这会导致 Macro/Assert: undefined;不能在模块中的定义之前引用标识符:'tables phase: 1
我已经尝试阅读文档,但无法弄清楚我做错了什么......那么我做错了什么?
最佳答案
为了在宏定义阶段使用定义,使用for-syntax
:
(require (for-syntax "exceptions.rkt"))
关于module - ( Racket ) "Cannot reference an identifier before its definition"带有从模块导入的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18643437/