Lua-尝试调用全局(nil值)

|| 执行此代码时,我得到一个错误“试图调用全局\'forId \'(nil值)”
function execute(args)
    local itemid = 526
    local bone = forId(itemid) -- this is where the error occurs
end

function forId(bid) 
    local xp = 0.0
    if bid == 526 or bid == 528 or bid == 2530 or bid == 2859 then
        xp = 4.5
    elseif bid == 3179 or bid == 3180 or bid == 3183 or bid == 3185 then
        xp = 5.0
    elseif bid == 530 then
        xp = 53
    elseif bid == 532 or bid == 3125 then
        xp = 15
    elseif bid == 4812 then
        xp = 22.5
    elseif bid == 7839 then
        xp = 30
    elseif bid == 6812 then
        xp = 50
    elseif bid == 536 then
        xp = 72
    end
    local bone = Bone:new(bid, xp)
    return bone
end

Bone = class(function(b, id, xp)
    b.id = id
    b.xp = xp
end)
谁能告诉我为什么?     
已邀请:
Lua逐行处理和执行文件,因此定义和使用文件的顺序可能很重要。在这种情况下,尽管您似乎并没有提供所有代码,因为您似乎将ѭ1定义为全局代码,但错误暗示了其他情况。您可以简单地尝试更改功能定义的顺序,以查看其是否有效。
Bone = class(function(b, id, xp)
    b.id = id
    b.xp = xp
end)

function forId(bid) 
    local xp = 0.0
    if bid == 526 or bid == 528 or bid == 2530 or bid == 2859 then
        xp = 4.5
    elseif bid == 3179 or bid == 3180 or bid == 3183 or bid == 3185 then
        xp = 5.0
    elseif bid == 530 then
        xp = 53
    elseif bid == 532 or bid == 3125 then
        xp = 15
    elseif bid == 4812 then
        xp = 22.5
    elseif bid == 7839 then
        xp = 30
    elseif bid == 6812 then
        xp = 50
    elseif bid == 536 then
        xp = 72
    end
    local bone = Bone:new(bid, xp)
    return bone
end

function execute(args)
    local itemid = 526
    local bone = forId(itemid) -- this is where the error occurs
end
但是,由于您没有提供完整的代码,因此可能会导致错误转移到其他地方。     
尝试先将其作为本地缓存,特别是如果您使用
module
local forId = forId //or _G.forId
local bone = forId(itemid)
    
我认为,您应该首先包括一个库文件,例如
dofile(core.app_path() .. \"\\\\strategies\\\\standard\\\\include\\\\helper.lua\");
(确切的命令可以在软件的文档中找到。)     

要回复问题请先登录注册