Lua Table Function returning
2016-7-17 1:56:24
收藏:0
阅读:69
评论:2
所以,基本上我想要的是当你有一组函数在一个表中时,能够像这样调用它:print(timeRequirements[3]()),与print(timeRequirements["old_man"]())相同
以下是我的表代码:
时间要求 = {
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: attempt to index field '?' (a nil value)
我想返回在隧道中的第3个函数。
点赞
用户1405757
作为一种替代硬编码分配每个键一个索引的方法,你可以尝试从你的函数表中获取所有的键并排序(请注意,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]())
2016-07-16 21:50:33
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你可以将每个函数重复添加两次,一次使用字符串键,一次使用数字键,如下所示:
-- 需要添加这个函数,因为它在 old_man 函数中使用 function timeSaveFor() return 0 end timeRequirements = {} timeRequirements.bulbasaur = function() --重置 if BEAST_MODE then return 1.99 end return 2.22 end timeRequirements[1] = timeRequirements.bulbasaur timeRequirements.nidoran = function() --重置 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的定义不变,只需添加一个包含所需顺序的表,例如:local order = { "bulbasaur", "nidoran", "old_man", "forest", "brock", "shorts", ... } print(timeRequirements["old_man"]()) -- 6.75 print(timeRequirements[order[3]]()) -- 6.75无论哪种方式,你都需要以某种方式明确你认为这些函数的顺序,因为表的键没有顺序。