尝试索引全域变量'Variable'(一个空值)

我已经阅读了其他回答,我理解我正在尝试访问尚未分配的变量。但是,从我所看到的,我已经分配了它。我的Lua不是最好的,也许我还不理解作用域,但有人能解释一下为什么我会得到这个错误吗?

include( "/vgui/cs_f4_menu.lua" )
AddCSLuaFile( "/vgui/cs_f4_menu.lua" )

local function openMenu()
    if(!CSF4Menu) then
        CSF4Menu = vgui.Create( "cs_f4_menu")
        CSF4Menu:SetVisible( false )
    end

    if(CSF4Menu:IsVisible()) then
        CSF4Menu:SetVisible( false )
        gui.EnableScreenClicker(false) --这里
    else
        CSF4Menu:SetVisible( true )
        gui.EnableScreenClicker(true)
    end
end

hook.Add("PlayerBindPress", "F4MenuBind", function(ply, bind, pressed)
    if string.find(bind, "gm_showspare2", 1, true) then
        F4Bind = input.KeyNameToNumber(input.LookupBinding(bind))
        openMenu()
    end
end)

vgui/cs_f4_menu.lua

scr_width = surface.ScreenWidth()
scr_height = surface.ScreenHeight()

box_width = math.floor(surface.ScreenWidth()*0.7)
box_height = math.floor(surface.ScreenHeight()*0.7)

local PANEL = {
    Init = function( self )
        self:SetSize( box_width, box_height )
        self:Center()
        self:SetVisible( true )
    end,

    Paint = function(self, w, h)
        surface.SetDrawColor(255, 255, 255, a=150)
        surface.DrawRect( 0, 0, w, h)
        surface.DrawOutlinedRect(2, 2, w-4, h-4)
    end
}

vgui.Register( "cs_f4_menu", PANEL)

我得到的确切错误是:

[ERROR] addons/darkrpmodification/lua/darkrp_modules/tpr_f4menu/cl_core.lua:14: attempt to index global 'CSF4Menu' (a nil value)
1. openMenu - addons/darkrpmodification/lua/darkrp_modules/tpr_f4menu/cl_core.lua:14
2. fn - addons/darkrpmodification/lua/darkrp_modules/tpr_f4menu/cl_core.lua:29
3. unknown - addons/ulib/lua/ulib/shared/hook.lua:109

但我仍然不完全理解为什么。我不得不将我的包含语句从函数中移出,因为我假设本地函数无法在范围外找到文件?

点赞