使用库作为#lang?

时间:2015-11-26 08:08:29

标签: racket

我有一些文件以这样开头:

#lang racket/base
(require "my-library.rkt")

如果我能用以下文件启动文件,我会非常高兴:

#lang my-library

是否可以将库用作#lang?我需要对my-library.rkt进行哪些更改?

3 个答案:

答案 0 :(得分:6)

如果你的图书馆没有做任何事情" lang like",你只想消除require?你可以:

  1. 改变my-library.rkt,如Chris所述:添加(provide (all-from-out racket/base))。但是,请不要创建任何my-library/lang/reader.rkt文件。

  2. 使用它:#lang s-exp "my-library.rkt"。请注意s-exp,因此从技术上讲,这并不能完全回答您的问题。 :)

  3. 请注意,您现在可以在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,并复制其他一些软件包。