문제
ASDF- install을 사용하여 LTK에 Steel Bank Common LISP를 설치했지만 V_V를 사용할 수도 없습니다. 아래 코드는 문서에서 가장 간단한 예이며 거의 구두로 복사됩니다.
(asdf:operate 'asdf:load-op :ltk)
(defun hello-1()
(with-ltk ()
(let ((b (make-instance 'button
:master nil
:text "Press Me"
:command (lambda ()
(format t "Hello World!~&")))))
(pack b))))
(hello-1)
이것은 내가 sbcl에서 얻은 오류 메시지입니다.
> ; in: LAMBDA NIL
; (PACK B)
;
; caught STYLE-WARNING:
; undefined function: PACK
; (WITH-LTK NIL
; (LET ((B (MAKE-INSTANCE 'BUTTON :MASTER NIL :TEXT "Press Me" :COMMAND #)))
; (PACK B)))
;
; caught STYLE-WARNING:
; undefined function: WITH-LTK
;
; compilation unit finished
; Undefined functions:
; PACK WITH-LTK
; caught 2 STYLE-WARNING conditions
debugger invoked on a SIMPLE-ERROR in thread #<THREAD "initial thread" RUNNING {1002A57B61}>:
There is no class named BUTTON.
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-PCL::FIND-CLASS-FROM-CELL BUTTON NIL T)
해결책
기호를 작업하려는 패키지로 가져와야합니다.
일반적인 "사용자"패키지는입니다 cl-user
, 그리고 "처녀"이미지가 당신을 거기에 놓을 것입니다. 다른 패키지에서 (내보낸) 기호를 가져 오려면 문제 (use-package :another-package)
. 대체의 예 :
(asdf:load-system :ltk) (use-package :ltk)
때로는 가져 오지 않은 기호를 사용하기를 원합니다. 그런 다음 패키지로 접두사를 할 수 있습니다. bar:foo
, 어디 bar
패키지 이름입니다 foo
상징물.
실제 시스템에서 작업 할 때는 일반적으로 하나 이상의 패키지를 정의합니다. 이것은 이루어집니다 defpackage
, 직접 가져올 다른 패키지를 알 수 있습니다.
(defpackage #:my-app (:use :cl :ltk))
그런 다음 해당 패키지로 전환해야합니다.
(in-package #:my-app)
여러 상호 의존적 파일로 더 복잡한 시스템을 설정할 때 시스템 정의 시설이 가치가 있습니다. 현재 가장 널리 사용되는 것은입니다 ASDF, 소수의 대안이 존재하지만.
다른 팁
ASDF는 패키지를 Common-LISP 사용자 패키지에로드하지 않습니다. 결과적으로 LTK를 사용하여 현재 패키지에 정의되지 않으므로 다음을 수행해야합니다.
(asdf:oos 'asdf:load-op :ltk)
(in-package :ltk)
;put your function here
제휴하지 않습니다 StackOverflow