执行此代码时,我收到错误“尝试调用全局'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)
谁能告诉我为什么?
答案 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
(确切的命令可以在你的软件的纪录片中找到。)