与LTK问题(Common Lisp的)
-
19-09-2019 - |
题
我安装LTK对钢银行Common Lisp的与ASDF安装,但我不能,甚至开始使用它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)
进口(出口)的符号。在REPL示例:
(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-USER包。其结果是,WITH-LTK没有在当前的包中定义的,所以你需要做的:
(asdf:oos 'asdf:load-op :ltk)
(in-package :ltk)
;put your function here
不隶属于 StackOverflow