首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(球拍)“无法在定义前引用标识符”,标识符从模块导入

(球拍)“无法在定义前引用标识符”,标识符从模块导入
EN

Stack Overflow用户
提问于 2013-09-06 02:27:27
回答 2查看 3.3K关注 0票数 3

我有一个文件"exceptions.rkt“

代码语言:javascript
复制
#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-rules生成并分配了名称的一元函数

代码语言:javascript
复制
(define Macro/Raise
  (syntax-rules ()
; ... body not important ...
))

在与"exceptions.rkt“相同的文件夹中,我有一个文件"tables.rkt”。

代码语言:javascript
复制
#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

我试着看过医生,但不知道我做错了什么。那么我到底做错了什么呢?

EN

回答 2

Stack Overflow用户

发布于 2013-09-06 03:23:03

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

代码语言:javascript
复制
(require (for-syntax "exceptions.rkt"))
票数 3
EN

Stack Overflow用户

发布于 2013-09-17 07:30:26

而且,您不需要在代码上使用(module exceptions racket ...)包装器,因为#lang racket已经生成了一个模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18643437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档