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

p00*_*k1e 2 racket

我试过了:

#lang racket
(require foo.rkt)
Run Code Online (Sandbox Code Playgroud)

#lang racket
(require "foo.rkt")
Run Code Online (Sandbox Code Playgroud)

#lang racket
(require (relative-in "." foo.rkt))
Run Code Online (Sandbox Code Playgroud)

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

Lei*_*sen 5

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

#lang racket
(require "foo.rkt")
Run Code Online (Sandbox Code Playgroud)

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

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

#lang racket ; foo.rkt
(provide x)
(define x 5)
Run Code Online (Sandbox Code Playgroud)

(提供的位置无关紧要,可以在define声明之上或之下.)

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

#lang racket ;  foo.rkt
(provide (all-defined-out))
(define x 5)
(define y 6)
Run Code Online (Sandbox Code Playgroud)

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

#lang racket
(require "foo.rkt")
x  ; => 5
Run Code Online (Sandbox Code Playgroud)

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

(require "subdir/to/foo.rkt")
Run Code Online (Sandbox Code Playgroud)

作为第一个附录,Racket也有importload.一般来说,你不需要这些,并且通常应该坚持require/ providepair.

作为第二个附录,您创建的本地文件将require作为字符串传递.当它的符号(例如:)时(require pict),表示您需要安装模块.虽然它更先进,但您可以通过阅读有关集合文档制作其中之一.