Lua - 尝试调用global(零值)

时间:2011-04-17 15:19:49

标签: lua

执行此代码时,我收到错误“尝试调用全局'forId'(零值)”

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)

谁能告诉我为什么?

3 个答案:

答案 0 :(得分:6)

Lua逐行处理和执行文件,因此您定义它们并使用它们的顺序非常重要。在这种情况下,虽然看起来您没有提供所有代码,因为看起来您将forID定义为全局,但错误意味着其他情况。您可以简单地尝试更改定义函数的顺序,看它是否有效。

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

但是由于你没有提供完整的代码,这可能只会导致错误转移到其他地方。

答案 1 :(得分:1)

首先尝试将其缓存为本地,特别是如果您使用module

local forId = forId //or _G.forId
local bone = forId(itemid)

答案 2 :(得分:0)

我认为,您首先应该包含一个库文件,例如

mySharedArray

(确切的命令可以在你的软件的纪录片中找到。)