Racket - 需要整个目录的文件

Racket - require an entire directory of files

目前我必须在每个文件的顶部执行此操作:

(require "dynamore/dynamore.rkt")
(require "dynamore/db.rkt")
(require "dynamore/types.rkt")

我希望能够做这样的事情:

(require dynamore)

最好不用自己开发 collection。

如果您不想创建包(这意味着您需要 require 相对):

  1. 如果 dynamore 只包含这三个文件,您可以使用 reprovide-langglob-in,如下所示:(require (glob-in "dynamore/*.rkt")).
  2. 您还可以在 dynamore 中创建 main.rkt,它使用 reprovide-langthe main functionality 专门重新提供这三个文件:

    #lang reprovide
    "dynamore.rkt"
    "db.rkt"
    "types.rkt"
    

    要使用它,只需 (require "dynamore/main.rkt")

    • 不使用 reprovide-lang 的本机解决方案是手动使用 all-from-out

      #lang racket/base
      (require "dynamore.rkt"
               "db.rkt"
               "types.rkt")
      (provide (all-from-out "dynamore.rkt"
                             "db.rkt"
                             "types.rkt"))
      

如果你更喜欢创建一个包,那么按照上面的解决方案2(创建main.rkt等),在dynamore目录中创建info.rkt如下:

#lang info
(define collection "dynamore")

然后运行raco pkg install。从现在开始,您将能够从任何地方(require dynamore)

注:要安装reprovide-lang、运行、raco pkg install reprovide-lang