基本上我想要的是当你在表格中有一组函数时,能够像print(timeRequirements[3]())
那样调用它,与print(timeRequirements["old_man"]()
这是我的表格代码:
timeRequirements = {
bulbasaur = function() --RESET
if BEAST_MODE then
return 1.99
end
return 2.22
end,
nidoran = function() --RESET
if BEAST_MODE then
return 6
end
return 6.4 + timeSaveFor("spearow")
end,
old_man = function()
return 6.75 + timeSaveFor("spearow")
end,
forest = function()
return 9.33 + timeSaveFor("spearow")
end,
brock = function()
return 11 + timeSaveFor("spearow")
end,
shorts = function() --TWEET
local timeLimit = 13.75 + timeSaveFor("spearow")
timeLimit = timeLimit + (3 - stats.nidoran.rating) * 0.2
return timeLimit
end,
mt_moon = function() --RESET
if BEAST_MODE then
return 24.75
end
local timeLimit = 25.50 + timeSaveFor("paras")
if Pokemon.info("nidoking", "level") >= 18 then
timeLimit = timeLimit + 0.33
elseif Pokemon.getExp() > 3730 then
timeLimit = timeLimit + 0.15
end
if stats.nidoran.attack > 15 then
timeLimit = timeLimit + 0.25
end
if stats.nidoran.speed > 14 then
timeLimit = timeLimit + 0.25
end
return timeLimit
end,
mankey = function()
return 31.25 + timeSaveFor("paras")
end,
bills = function()
return 36 + timeForStats() + timeSaveFor("paras")
end,
misty = function() --PB
return 37.75 + timeForStats() + timeSaveFor("paras")
end,
vermilion = function()
return 42.25 + timeForStats()
end,
trash = function() --RESET
if BEAST_MODE then
return 45.75
end
return 47.25 + timeForStats()
end,
safari_carbos = function()
return 68.25 + timeForStats()
end,
victory_road = function() --PB
return 97.3
end,
e4center = function()
return 99.75
end,
blue = function()
return 106.25
end,
champion = function() --PB
return 112
end,
}
它应该返回“6.75”
我真的不知道该怎么做,我尝试了一些事情,最终都回来了
LuaInterface.LuaScriptException:[string“main”]:108:尝试索引字段'?' (零值)
我想在隧道中返回第3个函数。
答案 0 :(得分:2)
作为为每个键分配索引的硬编码方式的替代方法,您可以尝试从命令的函数表中获取所有键(请注意,Lua中的映射是无序的;您必须使用数组)并且然后为每个人分配一个索引。当然,这将意味着索引将按字典顺序排列(除非您自己进行排序功能)。这是一个例子:
ftable = {
name1 = function()
return "name1 func"
end,
name2 = function()
return "name2 func"
end,
}
names = {}
for k, _ in pairs(ftable) do
table.insert(names, k)
end
table.sort(names)
for i, name in ipairs(names) do
ftable[i] = ftable[name]
end
print(ftable["name1"]())
print(ftable[1]())
答案 1 :(得分:1)
您可以将每个函数添加两次,一次使用字符串键,一次使用数字键,如下所示:
-- Had to add this, since it's used in the old_man function
function timeSaveFor()
return 0
end
timeRequirements = {}
timeRequirements.bulbasaur = function() --RESET
if BEAST_MODE then
return 1.99
end
return 2.22
end
timeRequirements[1] = timeRequirements.bulbasaur
timeRequirements.nidoran = function() --RESET
if BEAST_MODE then
return 6
end
return 6.4 + timeSaveFor("spearow")
end
timeRequirements[2] = timeRequirements.nidoran
timeRequirements.old_man = function()
return 6.75 + timeSaveFor("spearow")
end
timeRequirements[3] = timeRequirements.old_man
print(timeRequirements["old_man"]()) -- 6.75
print(timeRequirements[3]()) -- 6.75
作为替代方案,您可以按原样保留timeRequirements
的定义,只需添加一个包含所需顺序的表格。 E.g:
local order = { "bulbasaur", "nidoran", "old_man", "forest", "brock", "shorts", ... }
print(timeRequirements["old_man"]()) -- 6.75
print(timeRequirements[order[3]]()) -- 6.75
无论哪种方式,你都需要以某种方式明确表示你认为这些事情的顺序,因为表的键没有顺序。