Caricamento
Non appena una funzione di supporto cresce, spostala in un piccolo file di libreria. Ciò mantiene il plug-in focalizzato e rende l’helper riutilizzabile su più plug-in.
Crea una funzione di libreria
Possiamo prendere la funzione di invio del messaggio e creare un nuovo file con quello come contenuto. Salva il file nella cartella del repository, non nella parte dei plugin, magari vicino al livello più alto;
/home/your-username/code/
├── scheme/
├── library/
│ └── send-message.scm
└── plug-ins/
└── hello-world/
└── hello-world.scm- scheme/: questa è la directory principale in cui memorizzare il codice Scheme.
- library/: qui risiedono le funzioni condivise come
send-message.scm. - plug-in/: qui sono memorizzati i tuoi plug-in individuali.
- hello-world/: Cartella per lo specifico plug-in «Hello World!».
- hello-world.scm: File di script del plug-in.
- hello-world/: Cartella per lo specifico plug-in «Hello World!».
- library/: qui risiedono le funzioni condivise come
Esempio di una funzione di libreria send-message.scm
;; Funzione per gestire l'output dei messaggi verso varie destinazioni
(define (send-message message output)
(cond
;; Invia alla console dei messaggi
((eq? output 'error-console)
;; Impostare il gestore su console dei messaggi
(lumi-message-set-handler 2)
(lumi-message message))
;; Invia alla finestra di dialogo GUI
((eq? output 'gui)
;; Impostare il gestore sulla finestra di dialogo GUI
(lumi-message-set-handler 0)
(lumi-message message))
;; Invia alla finestra del terminale
((eq? output 'terminal)
;; L'output del terminal è gestito con display
(display message)))
;; Ripristinare il gestore dei messaggi predefinito alla console dei messaggi
(lumi-message-set-handler 2))Carica la funzione di libreria
Possiamo caricare quella funzione di libreria con il comando Scheme load;
Caricamento di un file di libreria:
#!/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")Ehi! Ora abbiamo qualcosa di più semplice e più breve da leggere, che si descrive da solo senza commenti. Questa è la conclusione soddisfacente del refactoring.