3

我有一个文件“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/Raiseetc实际上不是用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; cannot reference an identifier before its definition in module: 'tables phase: 1

我已经尝试阅读文档并且无法弄清楚我做错了什么......那么我做错了什么?

4

2 回答 2

3

为了使定义在宏定义阶段可用,请使用for-syntax

(require (for-syntax "exceptions.rkt"))
于 2013-09-05T19:23:03.327 回答
0

此外,您不需要(module exceptions racket ...)对代码进行包装,因为#lang racket已经生成了一个模块。

于 2013-09-16T23:30:26.007 回答