我想要一种像乱涂乱画/文本这样的语言,但是要提供一些附加功能。这是我尝试过的:
#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导入它的,所以我不会自动获取#%宏吗?如果是这样,那我将如何获得它们并重新导出它们?
还是这里发生了其他事情?
答案 0 :(得分:4)
#lang scribble/text
的语言和(require scribble/text)
的库是不同的模块。库版本不提供#%module-begin
或球拍的其他绑定:
当通过
scribble/text
而非require
使用#lang
时,则....它不包括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
模块没有文档说明,因此使用后果自负。