파일을 전체적으로 컴파일하면 처음에는 전체적으로 읽습니다. 그 당시 아직 평가 된 것은 없으므로 패키지 QT
은 아직 정의되지 않았습니다.
을 사용하여 이전에 무언가를 평가하거나 시스템 정의 기능 (ASDF가 요즘 있음)을 사용하여 시스템을 올바른 순서로로드 할 수 있습니다.
Eval-when
:
이
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload '#:qt))
(defpackage #:qt-example
(:use #:qt))
(in-package #:qt-example)
;; your code here
(경우에 당신이 궁금해 : 당신이 일반적으로 라이브러리 패키지로 주위 깨끗이하지만, 자신의, 신선한 패키지를 정의해서는 안
참고 코드를 잡아 , defpackage
, defun
, defclass
등은 eval-when
과 같은 내부 양식으로 확장되도록 특별히 설계된 매크로입니다.
약간의 일회성 스크립트에서는 때로는 괜찮습니다. 특히 즉시 하나 개 이상의 소스 파일을 가지고있는 주목할만한 크기의 시스템의 경우, 항공 자위대를 사용
;;;; 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 레지스트리를 설정해야 할 수도 있습니다.
(:source-registry
(:tree (:home "devel"))
(:tree (:home "src"))
:inherit-configuration)
그런 다음 자위대가 해당 디렉토리 아래에 정의 된 모든 시스템을 찾습니다 : 난 그냥 ~/.config/common-lisp/source-registry.conf
에 다음을 넣을 수 있도록 내 모든 지역 프로젝트에 대한 하나 또는 두 개의 기본 디렉토리가 좋아합니다. SLIME에서는 REPL에서 시스템 이름과 함께 ,load-system
또는 ,open-system
을 사용하여로드 할 수 있습니다. 그 안에있는 모든 파일을 열고 선택적으로로드하십시오.
파일에서 하나의 최상위 양식 (C-c C-c
사용)을 컴파일 할 때 SLIME은 in-package
양식을 뒤에서보고 어떤 패키지를 사용해야하는지 찾습니다. 일반적으로 상단에 파일 당 하나의 in-package
양식 만 있어야합니다.
일반적으로 유용한 바로 가기는 Lisp 소스 파일에서 C-c ~
이며, REPL을 파일의 디렉토리와 유효 패키지를 시점으로 전환합니다.
매우 비슷한 질문이 이미 답변되었습니다. 이것은 마지막 시간이 아닐 것입니다. 나는'eval-when' 태그를 추가했습니다. –