为何Lua闭包中的局部变量在Packer调用时被设为nil?
关于Lua闭包在Packer中无法捕获局部变量的问题
我了解Lua支持高阶函数,局部变量应当能被闭包捕获,但目前遇到变量plugin_name未被闭包正确捕获的问题:当该闭包由Packer调用时,plugin_name会变为nil;但直接调用闭包时则能正常工作。
编辑补充:
问题仅在闭包被Packer调用时出现。
相关代码示例
local cfg = function(plugin_name) print(plugin_name) -- <-- 有值 return function() -- 若由Packer调用此闭包,此时plugin_name为nil require("cfg." .. plugin_name) end end
直接调用闭包可正常运行的示例
local cfg = function(plugin_name) print(plugin_name) return function() print(plugin_name) local p= "cfg." .. plugin_name print(p) end end cfg("example")()
Packer中的调用代码
local status_ok, packer = pcall(require, "packer") local cfg = function(plugin_name) return function() local p= "cfg." .. plugin_name require(p) end end return packer.startup(function(use) use { "folke/which-key.nvim", config = function() require("cfg.which-key") end } -- 可正常运行 -- use { "folke/which-key.nvim", config = cfg("which-key") } -- 无法正常运行 end
请问是否需要进行额外操作来保留plugin_name的引用?
内容的提问来源于stack exchange,提问作者Chance
相关产品推荐
相关产品推荐

