加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 00:25:46 所属栏目:大数据 来源:网络整理
导读:我正在使用包含GNOME菜单的 xdg-menu-to-awesome-wm到 generate a Lua file,用于Awesome WM中的 inclusion.由于可能没有安装生成器脚本,我需要一些方法让Lua只需要菜单模块(如果存在). 我不想查看文件名,因为它可能位于package.path中的任何位置.一种选择是
我正在使用包含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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读