2013-03-01 2 views
9

Я хотел бы попробовать загрузить пакет в Lua. Пакет ansicolors и должен иметь только лучший внешний вид консоли.Как похудеть попробуйте загрузить пакеты в Lua?

Это сахар, и я не хочу, чтобы пользователи были вынуждены установить этот пакет.

Так я судимое что-то вроде:

ansicolors = require 'ansicolors' or nil 

Но, как я думал, это поднять модуль, не найдена ошибка и останавливает выполнение.

Итак, мой вопрос: есть ли изящное решение для загрузки пакетов и возврата к более простым решениям, когда это невозможно?

+1

Извините, первая версия моего ответа была неправильной - pcall возвращает модуль как второе значение. См. Мой обновленный ответ. –

+0

Это нормально Я посмотрел документацию. Даже если бы они были небольшой ошибкой в ​​этом примере, это то, что я искал. Спасибо –

ответ

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

почему у 2-й линии? просто используйте: 'local has_colors, ansicolors = pcall (require," ansicolors ")' – daurnimator

+0

@daurnimator - потому что OP хочет получить «module_value или nil» только в одной переменной. Использование двух переменных для одной и той же функциональности немного избыточно. –

Смежные вопросы