【问题标题】:Including an external file in racket在球拍中包含外部文件
【发布时间】:2011-06-16 02:48:36
【问题描述】:

我想包含给定球拍文件中定义的所有功能,以便获得与复制它们相同的效果。有可能吗?

【问题讨论】:

    标签: include scheme racket


    【解决方案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 的文档。

    【讨论】:

    • 抱歉唤醒了一个老线程,但是为什么foo.rkt中没有#lang racket?
    • @Manbroski 没有#lang 因为foo.rkt 不是一个模块,它只是一些定义。 #lang 创建一个模块。如果这样做,我们会尝试在我们的模块中包含一个模块,这不是我们想要的。
    【解决方案3】:

    你可以使用负载

    (load "assert.scm")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-04
      • 2018-06-22
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多