首页 > 解决方案 > 如何从涂鸦/文本重新导出#%module-begin 等?

问题描述

我想要一种像涂鸦/文本这样的语言,但提供了一些额外的功能。这是我尝试过的:

#lang racket/base

(require scribble/text)
(provide (all-from-out scribble/text)
  hello)

(define (hello name)
  (format "Hello ~a!" name))

当我尝试运行用这种语言编写的模块时,我收到一条消息,指出该模块的语言中没有 #%module-begin 绑定。

我假设 scribble/text 具有#%module-begin 的绑定,否则当我将它用作#lang 时它是如何工作的?

也许 scribble/text 知道我使用 'require' 而不是 #lang 来导入它,所以我不会自动获取 #% 宏?如果是这种情况,那么我将如何获得它们并重新出口它们?

还是这里发生了其他事情?

标签: racketscribble

解决方案


语言#lang scribble/text和库(require scribble/text)是不同的模块。库版本不提供#%module-begin或来自球拍的其他绑定:

scribble/text使用 viarequire而不是#lang, then .... 它不包括racket/base....的绑定

#lang scribble/text实际使用的模块语言是scribble/text/lang. 所以你可以像这样修复你的模块语言:

#lang racket/base

(require scribble/text/lang)
(provide (all-from-out scribble/text/lang)
         hello)

(define (hello name)
  (format "Hello ~a!" name))

但是,该模块scribble/text/lang未记录在案,因此使用风险自负。


推荐阅读