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
Другие вопросы по тегам