我有一些文件以这样开头:
#lang racket/base
(require "my-library.rkt")
如果我能用以下文件启动文件,我会非常高兴:
#lang my-library
是否可以将库用作#lang
?我需要对my-library.rkt
进行哪些更改?
答案 0 :(得分:6)
如果你的图书馆没有做任何事情" lang like",你只想消除require
?你可以:
改变my-library.rkt
,如Chris所述:添加(provide (all-from-out racket/base))
。但是,请不要创建任何my-library/lang/reader.rkt
文件。
使用它:#lang s-exp "my-library.rkt"
。请注意s-exp
,因此从技术上讲,这并不能完全回答您的问题。 :)
请注意,您现在可以在my-library.rkt
中使用影子绑定,因为它被用作lang而不是require
d。
答案 1 :(得分:4)
首先,使用以下内容创建my-library/lang/reader.rkt
:
#lang s-exp syntax/module-reader
my-library
然后,将以下内容添加到my-library.rkt
:
(provide (all-from-out racket/base))
您可以阅读syntax/module-reader
了解有关如何使用它的详细信息。
答案 2 :(得分:3)
我想补充克里斯的答案。您还可以设置#lang
,使其像内置的一样工作:
#lang my-library
为此,您需要设置一个包。获得包的最简单方法是使用raco pkg new
。
输入:
raco pkg new my-library
将模板替换为您的库。
然后,在包的根目录中,添加一个名为lang/reader.rkt
的文件夹和文件,并在该文件中放置:
#lang s-exp syntax/module-reader
my-library
现在,安装软件包(从文件夹的根目录开始运行raco pkg install
,现在您应该可以使用您的语言,就好像它是内置的一样。
正如克里斯所说,您可能希望确保添加到您的库中:
(provide (all-from-out racket/base))
确保您使用新语言进行racket/base
绑定。虽然如果你不想在那里绑定racket/base
,那么你可以将它们排除在外。
最后,您可以将新的花哨语言上传到包服务器,以便其他人可以下载它。这是documentation for it,但我建议您将其上传到github,并复制其他一些软件包。