我正在使用包含GNOME菜单的
xdg-menu-to-awesome-wm到
generate a Lua file,用于Awesome WM中的
inclusion.由于可能没有安装生成器脚本,我需要一些方法让Lua只需要菜单模块(如果存在).
我不想查看文件名,因为它可能位于package.path中的任何位置.一种选择是忽略模块不存在时创建的异常,但我宁愿不忽略任何其他异常 – 我想知道模块是否包含任何语法或其他错误.遗憾的是reference没有指定可以生成哪些异常,所以我不知道该怎么做.
解决方法
如果需要区分缺少的模块和语法错误,可以直接访问package.searchers中的搜索器功能.
这些功能将:
>如果成功,则返回加载程序功能
>如果找不到模块,则返回一个字符串
>如果语法错误,则抛出错误
所以你可以做的是模仿需要搜索模块的方式,依次调用每个搜索器,直到其中一个返回一个函数.与require不同,如果找不到模块,我们不需要抛出错误,即每个搜索器函数返回一个字符串.
function isModuleAvailable(name) if package.loaded[name] then return true else for _,searcher in ipairs(package.searchers or package.loaders) do local loader = searcher(name) if type(loader) == 'function' then package.preload[name] = loader return true end end return false end end