一个系统中的文件可以依赖于另一个系统中的文件吗?

Gab*_*ero 2 system common-lisp asdf

我正在阅读《实用的通用Lisp》一书,现在在第25章。对于每一章,我在书的文件夹中创建一个文件夹,其中包含该章的系统定义文件,程序包定义文件和代码。在第25章中,我需要在第24章中构建的软件包,因此第25章的软件包定义将如下所示:

(defpackage :chapter-25-package (:use :common-lisp :chapter-24-package))
Run Code Online (Sandbox Code Playgroud)

但是Chapter 24-package不在Chapter 25系统中。是否可以在此软件包中使用它而不必将其包含在系统中?注意:它们位于同一文件夹中的单独文件夹中。

这是我的系统定义。在第25章文件夹中的第24章系统中,有指向所有必需文件的链接。如果没有必要,请告诉我。

(defpackage :chapter-25-package (:use :common-lisp :chapter-24-package))
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:


(defpackage #:chapter-25-asd (:use :cl :asdf) (:export :chapter-25-system))
(in-package :chapter-25-asd)

(defsystem chapter-25-system
  :name 'chapter-25-system
  :components
  ((:file "chapter-25-package" :depends-on ("chapter-24-package"))
   (:file "chapter-25" :depends-on ("chapter-25-package")))
  :depends-on ("chapter-24-system"))

Run Code Online (Sandbox Code Playgroud)

编辑:这是我提出的第二个问题,所以对不起,如果有任何不好的做法。如果您让我知道,我将不胜感激。

Sva*_*nte 5

简而言之,不是,但是您可以依赖其他系统。

为了依赖其他系统,请:depends-on在系统定义中使用键。

chapter-25.asd

(defsystem "chapter-25"
  :depends-on ("chapter-24")
  :components ((:file "package")
               (:file "chapter-25" :depends-on ("package"))))
Run Code Online (Sandbox Code Playgroud)

假设在文件“ chapter-24.asd”中定义了系统“ chapter-24”,ASDF可以在其中找到它,这使ASDF确保在系统“ chapter-25”被加载之前已加载系统“ chapter-24”。已加载。

然后,在系统“ chapter-25”的代码中,可以假定系统“ chapter-24”中定义的软件包已加载并可以被引用,例如,通过以下:use选项defpackage

(defpackage #:chapter-25
  (:use (#:cl #:chapter-24)))
Run Code Online (Sandbox Code Playgroud)