我试过了:
#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)
如果文档中存在一个简单的示例,只包含当前文件目录中的一个文件,我找不到它.请帮忙.
你的第二个猜测实际上是对的:
#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)
现在您可以要求此文件x并y在另一个模块中使用:
#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也有import和load.一般来说,你不需要这些,并且通常应该坚持require/ providepair.
作为第二个附录,您创建的本地文件将require作为字符串传递.当它的符号(例如:)时(require pict),表示您需要安装模块.虽然它更先进,但您可以通过阅读有关集合的文档来制作其中之一.