当前位置 : 主页 > 网络编程 > lua >

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

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在使用包含GNOME菜单的 xdg-menu-to-awesome-wm到 generate a Lua file,用于Awesome WM中的 inclusion.由于可能没有安装生成器脚本,我需要一些方法让Lua只需要菜单模块(如果存在). 我不想查看文件名
我正在使用包含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
网友评论