在球拍中包含外部文件
Posted
技术标签:
【中文标题】在球拍中包含外部文件【英文标题】:Including an external file in racket 【发布时间】:2011-06-16 02:48:36 【问题描述】:我想包含给定球拍文件中定义的所有功能,以便获得与复制它们相同的效果。有可能吗?
【问题讨论】:
【参考方案1】:要从模块中导出函数,请使用provide
,考虑一个文件"foo.rkt"
:
#lang racket
(define fortytwo 42)
(define (det a b c)
(- (* b b) (* 4 a c)))
(provide (fortytwo det))
文件"bar.rkt"
现在可以从"foo.rkt"
导入定义:
#lang racket
(require "foo.rkt")
(define (baz a b c)
(+ (det a b c) (- c 4)))
您可以允许其他文件访问文件中定义的所有内容的另一种方法是使用(all-defined-out)
:
#lang racket
(define fortytwo 42)
(define (det a b c)
(- (* b b) (* 4 a c)))
(provide (all-defined-out))
希望对您有所帮助。
【讨论】:
另请注意,有include
,这可能是问题的最初内容。
不知何故包含在我的情况下不起作用,但您的解决方案完成了工作。
我相信导出这两个函数 fortytwo 和 det 的正确语法是 (provide fortytwo det)
。【参考方案2】:
你可以使用include
如下:
创建一个名为 "foo.rkt"
的文件,如下所示:
(define x 1)
(define y 2)
然后在另一个文件中:
#lang racket
(require racket/include)
(include "foo.rkt")
(+ x y)
您应该会看到结果3
。
您也可以查看include
的文档。
【讨论】:
山姆,请阅读Racket language questions tagging: tags "plt-scheme" and "racket"。 抱歉唤醒了一个老线程,但是为什么foo.rkt中没有#lang racket? @Manbroski 没有#lang
因为foo.rkt
不是一个模块,它只是一些定义。 #lang
创建一个模块。如果这样做,我们会尝试在我们的模块中包含一个模块,这不是我们想要的。【参考方案3】:
你可以使用负载
(load "assert.scm")
【讨论】:
以上是关于在球拍中包含外部文件的主要内容,如果未能解决你的问题,请参考以下文章