如何检查Lua中是否存在模块?

前端之家收集整理的这篇文章主要介绍了如何检查Lua中是否存在模块?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用包含GNOME菜单xdg-menu-to-awesome-wmgenerate 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

猜你在找的Lua相关文章