التحميل
بمجرد أن تنمو وظيفة مساعدة، انقلها إلى ملف مكتبة صغير. يبقي ذلك plug-in مركزًا ويجعل المساعد قابلًا لإعادة الاستخدام عبر plug-ins متعددة.
إنشاء وظيفة مكتبة
يمكننا أخذ وظيفة send-message وإنشاء ملف جديد يحتويها. احفظ الملف في مجلد مستودع Git، وليس في مجلد plug-ins، ربما قرب المستوى الأعلى:
/home/your-username/code/
├── scheme/
├── library/
│ └── send-message.scm
└── plug-ins/
└── hello-world/
└── hello-world.scm- scheme/: الدليل الرئيسي لتخزين كود Scheme.
- library/: حيث توجد الوظائف المشتركة مثل
send-message.scm. - plug-ins/: حيث تُخزَّن plug-ins الفردية.
- hello-world/: مجلد plug-in «Hello World!».
- hello-world.scm: ملف السكربت للـ plug-in.
- hello-world/: مجلد plug-in «Hello World!».
- library/: حيث توجد الوظائف المشتركة مثل
مثال على وظيفة المكتبة send-message.scm
;; وظيفة لمعالجة إخراج الرسائل إلى وجهات مختلفة
(define (send-message message output)
(cond
;; الإرسال إلى وحدة تحكم الأخطاء
((eq? output 'error-console)
;; ضبط المعالج على وحدة تحكم الأخطاء
(lumi-message-set-handler 2)
(lumi-message message))
;; الإرسال إلى مربع حوار GUI
((eq? output 'gui)
;; ضبط المعالج على مربع حوار GUI
(lumi-message-set-handler 0)
(lumi-message message))
;; الإرسال إلى نافذة الطرفية
((eq? output 'terminal)
;; إخراج الطرفية يُعالَج بـ display
(display message)))
;; استعادة معالج الرسائل الافتراضي إلى وحدة تحكم الأخطاء
(lumi-message-set-handler 2))تحميل وظيفة المكتبة
يمكننا تحميل وظيفة المكتبة بأمر Scheme load:
تحميل ملف مكتبة:
#!/usr/bin/env lumi-scheme-interpreter-0.1
(load "/home/mark/code/github/script-plugins/funky-library/send-message.scm")
(define (scheme-hello-world)
(let ((message "Hello world!\n"))
(send-message message 'gui)
(send-message message 'error-console)
(send-message message 'terminal)))
(scheme-register-procedure "scheme-hello-world"
"Hello world!"
"A Scheme procedure plug-in refactored"
"Mark Sweeney"
"Under GNU GENERAL PUBLIC LICENSE Version 3"
"2024")
(scheme-menu-register
"scheme-hello-world"
"<Image>/Funky")رائع! أصبح لدينا شيء أبسط وأقصر للقراءة، يصف نفسه تقريبًا دون تعليقات. هذه نتيجة مرضية لإعادة الهيكلة.