الحصول على المتغير foo غير مقيد بمحاولة استخدام برنامج تعليمي سريع للمشروع
سؤال
لقد اتبعت التعليمات هنا: http://xach.livejournal.com/278047.html وحملهم على العمل.لقد اتصلت باختبار المشروع، لذا لدي ملف test.lisp الذي يبدو كما يلي:
;;;; test.lisp
(in-package #:test)
;;; "test" goes here. Hacks and glory await!
(defun foo ()
(format t "hello from EMAIL-DB package~%"))
عندما أقوم بتشغيل (ql:quickload "اختبار") أحصل على: The variable FOO is unbound.
إذا قمت بالتعليق على السطر (in-package #:test)، فلن يعد foo غير مرتبط عندما أقوم بتحميله.مما يخبرني أن الوظيفة foo جيدة من الناحية النحوية.
ما الخطأ الذي افعله؟لماذا يكون foo غير منضم عند الاستخدام (ql:quickload "test")؟
إليك ملف الحزمة الخاص بي:
;;;; package.lisp
(defpackage #:test
(:use #:hunchentoot))
وملف test.asd الخاص بي:
;;;; test.asd
(asdf:defsystem #:test
:serial t
:depends-on (#:hunchentoot
#:cl-who
#:postmodern)
:components ((:file "package")
(:file "test")))
المحلول
حزمة الاختبار الخاصة بك لا تستخدم حزمة CL، لذا فإن DEFUN الخاص بك هو TEST::DEFUN (وليس CL:DEFUN).لا يوجد تعريف ماكرو للاختبار :: defun ، وبالتالي يستمر النظام في تقييم استخدام قواعد استدعاء الوظيفة ، والتي يجب تقييم كل شكل فرعي بالترتيب ، ثم تطبيق الوظيفة على قيم الوسائط.النموذج الفرعي الأول هو TEST::FOO، وهو بحث عن متغير - ولا يوجد متغير مثل TEST::FOO في صورتك.