Lua Table 函数返回
Lua Table Function returning
所以基本上我想要的是当你在 table 中有一组函数时,能够像 print(timeRequirements[3]())
一样调用它,做与 print(timeRequirements["old_man"]()
这是我的 table 代码:
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,
}
应该return "6.75"
我真的不知道该怎么做,我尝试了一些东西,最后都 returning
LuaInterface.LuaScriptException: [string "main"]:108: attempt to index field '?' (a nil value)
我想return隧道中的第三个功能。
您可以将每个函数添加两次,一次使用字符串键,一次使用数字键,如下所示:
-- 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
的定义,只需按您想要的顺序添加 table。例如:
local order = { "bulbasaur", "nidoran", "old_man", "forest", "brock", "shorts", ... }
print(timeRequirements["old_man"]()) -- 6.75
print(timeRequirements[order[3]]()) -- 6.75
无论哪种方式,您都需要以某种方式明确说明您认为这些东西的顺序,因为 table 的键没有顺序。
作为为每个键分配索引的硬编码方式的替代方法,您可以尝试从函数 table 中获取所有键(请注意,映射在 Lua 中是无序的;您d 必须使用一个数组),然后为它们每个分配一个索引。当然,这意味着索引将按字典顺序排序(除非您创建自己的排序函数)。这是一个例子:
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]())
所以基本上我想要的是当你在 table 中有一组函数时,能够像 print(timeRequirements[3]())
一样调用它,做与 print(timeRequirements["old_man"]()
这是我的 table 代码:
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,
}
应该return "6.75"
我真的不知道该怎么做,我尝试了一些东西,最后都 returning
LuaInterface.LuaScriptException: [string "main"]:108: attempt to index field '?' (a nil value)
我想return隧道中的第三个功能。
您可以将每个函数添加两次,一次使用字符串键,一次使用数字键,如下所示:
-- 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
的定义,只需按您想要的顺序添加 table。例如:
local order = { "bulbasaur", "nidoran", "old_man", "forest", "brock", "shorts", ... }
print(timeRequirements["old_man"]()) -- 6.75
print(timeRequirements[order[3]]()) -- 6.75
无论哪种方式,您都需要以某种方式明确说明您认为这些东西的顺序,因为 table 的键没有顺序。
作为为每个键分配索引的硬编码方式的替代方法,您可以尝试从函数 table 中获取所有键(请注意,映射在 Lua 中是无序的;您d 必须使用一个数组),然后为它们每个分配一个索引。当然,这意味着索引将按字典顺序排序(除非您创建自己的排序函数)。这是一个例子:
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]())