2013-03-01 12 views
9

Vorrei provare a caricare un pacchetto in Lua. Il pacchetto è ansicolors ed è solo per avere un output della console dall'aspetto migliore.Come cercare con garbo di caricare i pacchetti in Lua?

Questo è zucchero e non voglio che gli utenti siano obbligati a installare questo pacchetto.

Così ho provato qualcosa di simile:

ansicolors = require 'ansicolors' or nil 

Ma, come ho pensato, è sollevare un modulo non trovato errore e interrompe l'esecuzione.

Quindi la mia domanda è: esiste una soluzione elegante per provare a caricare pacchetti e fallback su soluzioni più semplici quando non è possibile?

+1

Mi dispiace, la prima versione della mia risposta non era corretta - pcall restituisce il modulo come secondo valore. Si prega di consultare la mia risposta aggiornata. –

+0

Va bene ho guardato la documentazione. Anche se fossero un piccolo errore nell'esempio, era quello che stavo cercando. Grazie –

risposta

18
local status, module = pcall(require, 'ansicolors') 
ansicolors = status and module or nil 
+0

perché avere la seconda linea? basta usare: 'local has_colors, ansicolors = pcall (require," ansicolors ")' – daurnimator

+0

@daurnimator - perché OP vuole ottenere "module_value o nil" in una sola variabile. L'utilizzo di due variabili per la stessa funzionalità è un po 'ridondante. –

Problemi correlati