Po skompilowaniu pliku jako całości, jest on najpierw czytany jako całość. W tym czasie żaden z nich nie został jeszcze oceniony, więc pakiet QT
nie jest jeszcze zdefiniowany.
Możesz użyć opcji eval-when
, aby dokonać oceny czegoś wcześniej lub użyć narzędzia do definiowania systemu (obecnie jest to ASDF), aby załadować system we właściwej kolejności.
Eval-when
:
pamiętać, że zwykle nie powinny syf wokół w pakietach bibliotecznych jednak zdefiniować własne, pakiet świeże trzymać swój kod:
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload '#:qt))
(defpackage #:qt-example
(:use #:qt))
(in-package #:qt-example)
;; your code here
(W przypadku, gdy zastanawiasz , defpackage
, defun
, defclass
itd. To specjalnie zaprojektowane makra, które rozszerzają się do postaci wewnątrz takiej eval-when
.)
Czasami jest to OK w przypadku małych jednorazowych skryptów. W przypadku systemów o dowolnej wielkości, szczególnie godne uwagi, jak tylko mają więcej niż jeden plik źródłowy, należy ASDF:
;;;; qt-example.asd
(in-package #:cl-user)
(asdf:defsystem #:qt-experiments
:description "Some experiments with QT."
:serial t
:components ((:file "package")
(:file "qt-example"))
:depends-on (#:qt))
;;;; package.lisp
(defpackage #:qt-example
(:use #:qt))
;;;; qt-example.lisp
(in-package #:qt-example)
ASDF pochodzi z większością open source wspólnych wdrożeń Lisp. Może być konieczne utworzenie rejestru ASDF. Chciałbym mieć jeden lub dwa bazowe katalogi dla wszystkich moich projektów lokalnych, tak, że można po prostu umieścić następujące do ~/.config/common-lisp/source-registry.conf
:
(:source-registry
(:tree (:home "devel"))
(:tree (:home "src"))
:inherit-configuration)
Następnie ASDF wyszukuje wszystkie systemy zdefiniowane poniżej tych katalogach. W SLIME można po prostu użyć ,load-system
lub ,open-system
z REPL z nazwą systemu, aby go załadować, resp. otwórz wszystkie pliki w nim, opcjonalnie ładując je.
Podczas kompilowania pojedynczego formularza (z użyciem C-c C-c
) z pliku, SLIME przegląda stamtąd formularz in-package
, aby dowiedzieć się, jaki pakiet powinien przyjąć. Konwencjonalnie powinieneś mieć tylko jeden formularz in-package
na jeden plik, u góry.
Popularnym skrótem jest C-c ~
w plikach źródłowych Lisp, który przełącza REPL na katalog pliku i efektywny pakiet w punkcie.
Na podobne pytania już udzielono odpowiedzi. To nie będzie ostatni raz. Dodałem tag "eval-when". –