如何在当前的Racket文件中包含另一个定义文件?

时间:2016-09-09 17:52:48

标签: racket

我试过了:

#lang racket
(require foo.rkt)

#lang racket
(require "foo.rkt")

#lang racket
(require (relative-in "." foo.rkt))

如果文档中存在一个简单的示例,只包含当前文件目录中的一个文件,我找不到它。请帮忙。

1 个答案:

答案 0 :(得分:5)

你的第二个猜测实际上是正确的:

#lang racket
(require "foo.rkt")

但是,您需要做的是provide您希望从其他文件中获取的函数,否则foo.rkt中的变量不会绑定到您的模块中。

所以foo.rkt文件的例子是:

#lang racket ; foo.rkt
(provide x)
(define x 5)

(提供的位置无关紧要,可以高于或低于define声明。)

如果需要,可以使用all-defined-out导出模块可以一次性提供的所有内容。要做到这一点:

#lang racket ;  foo.rkt
(provide (all-defined-out))
(define x 5)
(define y 6)

现在您可以要求此文件并在另一个模块中使用xy

#lang racket
(require "foo.rkt")
x  ; => 5

请注意,这两个文件需要位于同一目录中,否则您需要传入该目录的路径。如:

(require "subdir/to/foo.rkt")

作为第一个附录,Racket还有importload。一般情况下,您不需要这些,并且通常应该坚持使用require / provide对。

作为第二个附录,您创建的本地文件将作为字符串传递到require。当它的符号(例如:(require pict))表示您需要已安装的模块时。虽然它更高级,但您可以通过阅读documentation on collections来制作其中一个。