Lua中判断变量是否为多个值之一
2016-10-14 5:55:4
收藏:0
阅读:145
评论:3
我有一个值armyName,需要一个函数来检查它是否为8个值中的一个。由于我对Lua相当陌生,我正在寻找执行此类检查的最佳方法。
这段代码可以工作:
local function isPlayerArmyName(armyName)
return armyName == "ARMY_1"
or armyName == "ARMY_2"
or armyName == "ARMY_3"
or armyName == "ARMY_4"
or armyName == "ARMY_5"
or armyName == "ARMY_6"
or armyName == "ARMY_7"
or armyName == "ARMY_8"
end
这个也可以工作:
local function isPlayerArmyName(armyName)
local names = {
["ARMY_1"] = true, ["ARMY_2"] = true, ["ARMY_3"] = true, ["ARMY_4"] = true,
["ARMY_5"] = true, ["ARMY_6"] = true, ["ARMY_7"] = true, ["ARMY_8"] = true,
}
return names[armyName] or false
end
与此PHP代码相比,它们都相当傻:
return in_array( $armyName, [ "ARMY_1", "ARMY_2", "ARMY_3", ..., "ARMY_8" ] )
有没有更好的方法来执行此类检查,比提供的Lua代码片段更好?如果没有,标准的Lua程序员会更喜欢哪一个方法?
我正在使用Lua 5.0。
点赞
用户1381216
你也可以这样做:
local names = {"ARMY_1", "ARMY_2", "ARMY_3", "ARMY_4", "ARMY_5", "ARMY_6", "ARMY_7", "ARMY_8"}
local function isPlayerArmyName(armyName)
for index = 1, #names do
if names[index] == armyName then
return true
end
end
end
这个选项是可扩展的,因为你可以在需要更改实现的情况下添加新的军队。你可以将 for 部分提取到你自己的 in_array 函数中,可以在所有代码中使用:
local function in_array(value, array)
for index = 1, #array do
if array[index] == value then
return true
end
end
return false -- 我们可以省略这部分,因为 nil 就像 false 一样
end
local armyNames = {"ARMY_1", "ARMY_2", "ARMY_3", "ARMY_4", "ARMY_5", "ARMY_6", "ARMY_7", "ARMY_8"}
local function isPlayerArmyName(armyName)
return in_array(armyName, armyNames)
end
由于第二个选项使用键,所以这个实现可能会比第二个选项慢一些。第二个选项也不错,甚至可能是最快的。它看起来很愚蠢,但很容易配置。
您还可以使用模式匹配,如果不需要表格并将坚持该军队命名约定:
local function isPlayerArmyName(armyName)
return (string.match(armyName, "^ARMY_[1-8]$")) ~= nil
end
您甚至可以删除 ~= nil,因为它将返回一个字符串,在Lua中也为true:
local function isPlayerArmyName(armyName)
return string.match(armyName, "^ARMY_[1-8]$")
end
if isPlayerArmyName("ARMY_1") then
-- 这将被执行,因为它返回了 "ARMY_1" ,它会被计算为 true
end
if isPlayerArmyName("ARMY_9") then
-- 这将不会被执行,因为该函数返回了 nil。
end
至于你提供的第一个例子,我不建议这样做,因为它在 Lua 中或其他任何语言中都不是模块化或可扩展的。
2016-10-14 06:33:37
用户3979429
函数 in_dictionary(val, dict)
返回 dict[val]
结束
打印(in_dictionary("potatoes", {apples = true, potatoes = true, oranges = true}))
可能是实现它的最佳方式。
2016-10-14 09:52:04
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

# 函数定义:在给定的数组中查找指定的值是否存在 function in_array(v, t) for i=1,#t do if v == t[i] then return true end end end # 使用示例:如果指定数组中包含值v,则执行某些操作 if in_array(v, {....}) then .... end