سؤال

قمت بتثبيت LTK إلى Lisp Bank Bank المشترك مع تثبيت 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). وبعد مثال على الأداة:

(ASDF: تحميل النظام: LTK) (استخدام الحزمة: LTK)

في بعض الأحيان يريد المرء استخدام الرموز غير المستوردة. يمكنك بعد ذلك بادئة لهم مع الحزمة، مثل bar:foo, ، أين bar هو اسم الحزمة و foo الرمز.

عند العمل على نظام حقيقي، ستحدد عادة حزم واحدة أو أكثر لذلك. يتم ذلك من خلال defpackage, ، والتي يمكنك معرفة الحزم الأخرى لاستيراد مباشرة:

(Defpackage #: My-APP (: استخدام: CL: LTK))

ثم، تحتاج إلى التبديل إلى هذه الحزمة:

(في الحزمة #: بلدي التطبيق)

عند إعداد نظام أكثر تعقيدا مع العديد من الملفات المترابطة، يصبح مرفق تعريف النظام جديرا بالاهتمام. الأكثر استخداما على نطاق واسع حاليا asdf., على الرغم من وجود حفنة من البدائل.

نصائح أخرى

لا يقوم ASDF بتحميل حزمة في حزمة مستخدم Common-LISP. نتيجة لذلك، لم يتم تعريف LTK مع LTK في الحزمة الحالية الخاصة بك، لذلك عليك القيام بذلك:

(asdf:oos 'asdf:load-op :ltk)
(in-package :ltk)
;put your function here
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top