首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么lua require不会搜索当前目录?

Lua的require函数用于加载模块,但它不会默认搜索当前目录的原因是为了避免模块名冲突和提高模块的可重用性。

当使用require加载模块时,Lua会按照一定的搜索路径来查找模块文件。默认的搜索路径包括Lua的安装目录和环境变量LUA_PATH中指定的路径。这样设计的目的是为了方便模块的管理和共享。

如果require函数默认搜索当前目录,那么当模块名与Lua标准库或其他第三方库的模块名相同时,就会导致模块名冲突的问题。为了避免这种冲突,Lua选择不搜索当前目录,而是通过指定的搜索路径来加载模块。

此外,不搜索当前目录还可以提高模块的可重用性。如果一个模块在某个目录下被多个程序使用,那么这个模块可以被放置在一个公共的位置,其他程序只需要通过指定的搜索路径加载该模块即可,不需要将模块复制到每个程序的目录下。

总结起来,Lua的require函数不搜索当前目录是为了避免模块名冲突和提高模块的可重用性。如果需要加载当前目录的模块,可以通过修改搜索路径或使用相对路径的方式来实现。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(ECS):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能机器学习平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网通信平台(IoT Hub):https://cloud.tencent.com/product/iothub
  • 移动应用开发平台(MADP):https://cloud.tencent.com/product/madp
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Lua中模块和包

通常,Lua语言不会设置规则。相反,Lua语言提供的是足够强大的机制供不同的开发者实现最适合自己的规则。然而,这种方法对于模块而言并不是特别适用。...搜索路径 在搜索一个Lua文件时,函数require使用的路径与典型的路径略有不同。典型的路径是很多目录组成的列表,并在其中搜索指定的文件。...函数require用于搜索Lua文件的路径是变量package.path的当前值。当package模块被初始化后,它就把变量package.path设置成环境变量LUA_PATH_5_3的值。...转换之后,函数require会像搜索其他名称一样搜索这个名称。例如,假设目录分隔符是斜杠并且有如下路径: ./?.lua;/usr/local/lua/?.lua;/usr/local/lua/?...例如,没有目录层次的系统可以使用下画线作为”目录分隔符“,因此调用require “a,b”会搜索文件a_b.lua

74030

lazy-nvim插件管理器基础入门

")查找当前init.lua所在目录下的lua目录下的lazynvim-init.lua文件,运行其内容。...将 lazypath 设置为运行时路径 -- rtp(runtime path) -- nvim进行路径搜索的时候,除已有的路径,还会从prepend的路径中查找 -- 否则,下面 require("lazy...模块搜索路径下,以便可以require到lazy.nvim模块; 让lazy.nvim加载插件。...(这里面还有目录lazy/init.lua文件) ├── selene.toml ├── stylua.toml ├── tests └── vim.toml 搜索lazy模块的时候,会从~/.local...插件安装配置 在这一节中,我们将基于上面的成果,尝试安装几个高频的插件(关于这些插件的功能与使用方式,本文不会详细介绍): 文件树插件:nvim-tree.lua 文件状态展示插件:lualine.nvim

2.4K30
  • 【Unity面试篇】Unity 面试题总结甄选 |热更新与Lua语言 | ❤️持续更新❤️

    根据当前版本号,和平台号去版本服务器上检查是否有热更。 从热更服务器上下载 MD5 文件,比对需要热更的具体文件列表。 从热更服务器上下载需要热更的资源,解压到热更资源目录。...游戏运行加载资源,优先到热更目录中加载,再到母包资源目录加载。 12....require从package.loader中获得的值仅仅是对那张表(模块)的引用,改变这个值并不会改变require使用的表(模块)。...package.preload 保存一些特殊模块的加载器:这里面的值仅仅是对那张表(模块)的引用,改变这个值并不会改变require使用的表(模块)。...或返回一个描述为什么没有找到这个模块的字符串或者nil。 ---- 总结 全网最全的 Unity 热更新与Lua语言 面试题都在这里了,希望本篇文章能够让你在面试关卡如鱼得水得到自己想要的工作。

    1.1K31

    Lua模块的加载与内存释放

    进入下载好的 luajit 解压目录 LuaJIT-2.1.0-beta2/src  运行 msvcbuild.bat 重点在模块的编写,模块编写的方法导致了释放内存的不同。...当 require 准备加载一个 lua 文件时,它会先检测 package.loaded[modulename] 是否返回 false,如果不是 false,它直接返回相应存储的值,否则查找并加载相应的文件...我拿到的 lua 文件是这样定义的,原本是一个json,将其转为lua的,将所有数据赋值给一个变量(require 之后多了一个全局变量),这样 package.loaded[modulename] 为...true,重置这个值并不会回收内存,需要同时清理全局变量(将相应变量置为 nil),才可以实现内存的回收。...一个约4.5M的 lua 文件,被 require 进内存后,lua 所占用的内存大小变为 20M。为什么会这么大,有待进一步从源码中寻找答案。

    2.9K30

    用VSCode进行服务器Lua代码远程调试

    安装VSC服务器端插件 如果想实现Lua远程调试,需要在VSC的插件选项卡里,搜索到指定的插件,进行安装,VSC会通过SSH协议向远程调试的服务器端程序,上传到远程服务器上之后,即可在客户端进行远程Lua...可以通过Luarocks快速的安装所需要的各种Lua库,Luarocks的库可以直接按名字进行远程安装,又可以先下载,然后再进行本地化安装。可以装将库只装到当前用户的目录,又可以将库装到公用目录。.../.luarocks,如果用--local时,不要加sudo, 直接安装到当前目录的用户。...Luarocks list显示当前用户安装的rock,才能显示出来安装的Rock有Markdown。 如果你在当前用户,运行lua5.3,require"markdown",Lua会提示找不到这个包。.../home/lua/.luarocks/lib/lua/5.3 6.4 Lua库使用 因为上面采用了--local的方式进行安装的,所以库文件是在当前用户目录的,需设置环境变量,或者在Lua程序代码指明的

    3.6K21

    修改lua的文件加载器,自定义lua文件加载

    Lua提供高级的require函数来加载运行库。 1. require搜索目录加载文件 2. require会判断是否文件已经加载避免重复加载同一文件。...require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表。require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法。...lua 调用require "lili"时会试着打开这些文件: lili lili.lua c:\windows\lili /usr/local/lua/lili/lili.lua require关注的问题只有分号...(模式之间的分隔符)和问号,其他的信息(目录分隔符,文件扩展名)在路径中定义。...为了确定路径,Lua首先检查全局变量LUA_PATH是否为一个字符串,如果是则认为这个串就是路径;否则require检查环境变量LUA_PATH的值,如果两个都失败require使用固定的路径(典型的"

    2.3K30

    《Walk On LuaJIT》 (上篇)

    当然,遵守Performance-Guide的规则,一定不会出现性能太差的代码。 b....在VS里建立个命令工程(64位),设置\src为工作目录,指定\src为附加包含目录和附加库目录,并且在附加依赖项里加入luajit.lib和lua51.lib 4....这里为什么if和循环结束都对应了2个guard(1和4,2和5) 通过调试上述代码,发现lj_trace_exit确实是被调用了2次,而且在此函数中,会调用lj_snap_restore获取对应快照中的内容...超过递归调用要求的最小调用次数2(也就是前面提到的需要达到的trace运行次数的最小阈值),就会设置连接到递归自身(Up-recursion),然后停止记录和tracing,成功生成trace(尾递归f2也类似,但由于尾递归不会当前函数展开调用堆栈的缘故...一旦某个BC被加入黑名单,就不会再对该BC进行解释时的hotcount的统计,而只对该BC做单纯的解释执行(这也意味着比普通的解释会更快): require("jit.v").on("t1.log")-

    2.2K33

    Lua模块引入import和require的区别

    Lua 中引入一个模块,可以采用两种方式:import和require方式,具体的区别在于: 载入一个模块 import()与 require()功能相同,但具有一定程度的自动化特性。...假设我们有如下的目录结构: app/ app/classes/ app/classes/MyClass.lua app/classes/MyClassBase.lua app/classes/data/..."app.classes.data.Data2") 假如我们将 MyClass 及其相关文件换一个目录存放,那么就必须修改 MyClass 中的 require() 命令,否则将找不到模块文件。...时,import() 会从当前模块所在目录中查找其他模块。因此 MyClass 及其相关文件不管存放到什么目录里,我们都不再需要修改 MyClass 中的 import() 命令。...,这样 import() 会从更上层的目录开始查找模块。 不过 import() 只有在模块级别调用(也就是没有将 import() 写在任何函数中)时,才能够自动得到当前模块名。

    1.8K10

    openresty 页面静态化及多级缓存

    动态网页: 是以.asp、.jsp、.php、.perl、.cgi等形式为后缀, 根据用户的不同的操作,呈现出不同的数据给用户看; eg: 浏览器的 搜索~ 输入不同的关键字 会呈现给用户不同的内容...为什么需要页面静态化 网页静态化有利于搜索引擎收录,静态页面和动态页面想对比来说,搜索引擎更喜欢静态页面 对于静态页面也更好抓取收录,这样对于网站优化来说有很大的好处,更利于排名 你可以去观察那些大型的门户网站...还有就是静态页面不会因为程序、数据库等出问题,影响网站的正常打开静态页面会使网站更加稳定,增加网站的信任度。...更多实例: lua脚本 info1.lua -- 中文转码 ngx.header.content_type="text/html;charset=utf8" local template = require...#}:注释; {-raw-} 中间的内容不会解析,作为纯文本输出; nginx配置文件 lua.conf 添加 location /info1{ default_type text/html;

    14210

    从零开始配置vim(25)——关于 c++ python 的配置

    的配置,主要是使用 lsp 服务端的配置和对应的跳转之类的快捷键配置,我们将它放到了 lsp/lua.lua 目录下了。...但是一想想我们使用 c++、Python 或者其他什么语言的时候,这些快捷键应该是不会修改的,这个时候自然就想到了要重用快捷键了。所以来配置之前的第一件事就是想办法重用这些快捷键。...我们可以在命令模式中输入 :LspInstallInfo 查看当前已安装的 lsp 服务。下面会列出一堆的未安装的 lsp 服务。...安装完成之后我们还是按照惯例,在 ftplugin 目录下建立一个 python.lua 文件并且在该文件中加载 lua/lsp/python.lua 文件 我们在 lua/lsp/python.lua...文件中加入下面的代码 local lsp_set_keymap = require("keybindings") local util = require 'lspconfig/util' require

    1.1K30

    从零开始配置 vim(11)——插件管理

    随着配置的越来越多,以后在 init.lua 中一定伴随着大量的 require。我们可以通过 gf 快速跳转到对应的模块,但是前提条件是我们已经设置了 path 变量。...nvimrc, callback = function() vim.o.path = vim.o.path .. ",**/*" end }) path 中可以添加多个路径作为文件搜索的路径...我们之前说过可以使用 **/* 表示当前目录下所有文件。这样退出重新进入 nvim 之后不需要再次手动输入 path 了。...所以我需要在 init.lua 中加载这个文件 require("autocmd") 插件管理 在新版 neovim (版本大于 0.5 ) 中,一般推荐使用 packer 这个插件管理工具。.../packer.nvim' -- 添加另外插件 end) 接着我们需要在 init.lua 中加载这个文件 require("plugins") 后面我们可以使用下面的一些命令来对插件进行管理

    1K30

    从零开始配置vim(23)——lsp基础配置

    nvim-lsp-installer 插件 require("nvim-lsp-installer").setup {} 我们可以使用 LspInstallInfo 命令来查看当前lsp服务的安装情况...我们在这个目录里面定义一个 lua.lua 的文件,写入以下内容 -- 是否将 tab 替换为 space vim.bo.expandtab = true vim.bo.shiftwidth = 4 vim.bo.tabstop...在那篇文章中我们说它定义了自动命令,当检测到对应文件类型的时候会调用 ~/.config/nvim/ftplugin 目录中对应以文件类型命名的目录或者 lua 文件。...另外再在 ~/.config/nvim/lua 目录创建一个 lsp目录,专门用来保存语言的配置。...然后再在 ftplugin/lua.lua 中加载它 require('lsp/lua') 我们在这个文件中添加 Lua 相关的lsp配置 -- 定义快捷键 -- 根据官方的提示,这里我们使用 on_attach

    3.5K10

    vim 从嫌弃到依赖(21)——跨文件搜索

    但是到目前为止还没有介绍如何在工程目录中进行搜索,而这个功能是其他编辑器的基本功能。...vim 为这种需求提供了自己的工具—— :grep 命令和 :vimgrep 在vim中输入 :grep "\-\- TODO" **/*.lua 会发现 vim 在下方显示了当前所有搜索到的内容。...grep -n "\-\- TODO" **/*.lua /dev/null 2>&1| tee /tmp/nvimPRHF8B/6 这是为什么呢?在这一小节我们将来探讨这些问题。...插一句题外话,我觉得 ack相较于 grep来说,最大的优势在于它可以识别不同的文件类型,这样就可以做到只搜索某一类型文件中的内容,而且默认支持递归搜索当前目录下所有文件。...ack 默认会搜索当前目录中所有文件中的内容,所以这里可以不需要像 grep 那样给出具体的目录。 我们可以使用 --nogroup来达到与 grep相同的输出格式。

    1K30
    领券