如何从涂鸦/文本中重新导出#%module-begin等?

时间:2019-07-14 22:41:31

标签: racket scribble

我想要一种像乱涂乱画/文本这样的语言,但是要提供一些附加功能。这是我尝试过的:

#lang racket/base

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

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

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

我认为涂鸦/文本具有#%module-begin的绑定,否则当我将其用作#lang时它将如何工作?

也许涂鸦/文本知道我是使用'require'而不是#lang导入它的,所以我不会自动获取#%宏吗?如果是这样,那我将如何获得它们并重新导出它们?

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

1 个答案:

答案 0 :(得分:4)

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

  

当通过scribble/text而非require使用#lang时,则....它不包括racket/base的绑定...。

实际使用的模块语言#lang scribble/textscribble/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模块没有文档说明,因此使用后果自负。