module - ( Racket ) "Cannot reference an identifier before its definition"带有从模块导入的标识符

标签 module racket

我有一个文件“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/

相关文章:

php - 确定是否启用了 Magento 模块

javascript - 当我使用 gulp 和 browserify 时,我的 javascript 模块无法工作

winapi - Powershell:通过 CreateProcess() 调用时某些模块不可用

scheme - Racket 中的管道

lisp - 如何将 drracket 初始屏幕更改为情人节

list - 在方案中交叉更多列表

javascript - Chrome 中的 ES6 模块

python - 如何列出模块中的所有功能?

datetime - 尝试从 Racket 中的字符串创建日期 - 查找秒非常慢,需要工作日年日?

scheme - Racket 开始形式