You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:10:43