Lua - требует отступления / обработки ошибок
Я в настоящее время использую awesome
оконный менеджер на разных машинах Linux, работающих под разными дистрибутивами. Все машины используют одинаково (lua
) конфигурационный файл.
Некоторые из машин имеют lua-файловую систему (lfs
), а другие нет. Моя конфигурация будет предпочтительно использовать lfs
, но если он не установлен, я бы хотел предоставить альтернативную (неоптимальную) резервную процедуру.
Вот мой вопрос во всей его простоте:
- Как бы я поймал ошибку, выданную
require(lfs)
заявление?
1 ответ
require
это не магическая функция. Это функция, как и любая другая в Lua. И это сигнализирует об ошибках, используя стандартные средства сигнализации ошибок Lua.
Поэтому вы ловите ошибки из require
точно так же, как вы делаете любую другую функцию в Lua. А именно, вы заверните это в pcall
:
local status, lfs = pcall(require, "lfs")
if(status) then
--lfs exists, so use it.
end
Действительно, вы можете сделать свой собственный prequire
функция, которая работает для загрузки чего-либо:
function prequire(...)
local status, lib = pcall(require, ...)
if(status) then return lib end
--Library failed to load, so perhaps return `nil` or something?
return nil
end
local lfs = prequire("lfs")
if(lfs) then
--use lfs.
end