Lua - 尝试调用全局变量(一个空值)

执行这段代码时,我收到一个错误“尝试调用全局函数'forId'(一个空值)”

function execute(args)
    local itemid = 526
    local bone = forId(itemid) -- 这里出现错误
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)

有谁可以告诉我为什么?

原文链接 https://stackoverflow.com/questions/5694331

点赞
stackoverflow用户255049
stackoverflow用户255049

尝试将其作为本地缓存,特别是在使用 module 时:

local forId = forId //或 _G.forId
local bone = forId(itemid)
2011-04-17 16:03:00
stackoverflow用户227513
stackoverflow用户227513

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) -- 这是错误发生的地方
end

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

2011-04-17 18:22:47
stackoverflow用户2377343
stackoverflow用户2377343

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

dofile(core.app_path() .. "\\strategies\\standard\\include\\helper.lua");

(你的软件说明文件中可以找到确切的命令。)

2016-01-18 19:38:30