Lua中require('some.module')与require('some').module的区别及实践问题
两种Telescope引用方式的核心区别
1. local builtin = require('telescope.builtin') 的工作逻辑
- 这是Lua标准的模块加载方式,
require('telescope.builtin')会直接定位到Telescope插件目录下的builtin.lua文件,执行其中代码后返回模块对外暴露的所有内容 - 把返回值赋值给局部变量
builtin后,这个变量就直接指向builtin模块的完整API集合,因此能直接调用builtin.find_files()正常工作
2. telescope.builtin.find_files 报错的原因
- 如果你仅加载了Telescope主模块(比如
local telescope = require('telescope')),主模块并不会自动预加载所有子模块 - 此时
require('telescope')返回的主模块table里,不存在builtin这个字段,直接访问telescope.builtin会得到nil,也就触发了"attempt to index field 'builtin' (a nil value)"的错误
额外说明
- 并非所有插件都会在主模块中自动挂载子模块,Telescope的设计就是让子模块需要单独通过
require加载 - 若你一定要用
telescope.builtin的形式调用,可以手动把builtin模块挂载到主模块上,示例代码:local telescope = require('telescope') telescope.builtin = require('telescope.builtin') -- 之后就能正常调用telescope.builtin.find_files()了
内容的提问来源于stack exchange,提问作者glades
相关产品推荐
相关产品推荐

