【发布时间】:2022-01-27 02:41:51
【问题描述】:
当我说
if var == "one" or var == "two" or var == "three" or var == "four" then
var 总是一样的,我可以以某种方式缩短它,比如
if var == "one" or "two" or "three" or"four" then
我必须使用括号吗?
【问题讨论】:
标签: lua
当我说
if var == "one" or var == "two" or var == "three" or var == "four" then
var 总是一样的,我可以以某种方式缩短它,比如
if var == "one" or "two" or "three" or"four" then
我必须使用括号吗?
【问题讨论】:
标签: lua
我们可以利用桌子。特别是,如果some_table不包含some_key,那么some_table[some_key]返回nil,这是假的。
例如:
if ({one=1, two=1, three=1, four=1})[var] then
我使用了1,因为它的类型很短,但是您可以使用除nil 或false 之外的任何值,因为这两个是Lua 中唯一的虚假值。
这会在每次评估条件时创建一个新表,因此如果您想经常检查它(例如在一个紧密的循环中),那么在外部创建表可能是值得的循环:
local CONDITION = {one=1, two=1, three=1, four=1}
...
-- inside a loop:
if CONDITION[var] then
【讨论】:
Lua 的 if 语句需要一个奇异值。该值将转换为布尔值 true 和 false 确定 if 行为的值。
所以,换句话说,你可以想象你的if是这样的:
condition = var == "one" or var == "two" or var == "three" or var == "four"
if condition then
--...
end
所以if 本身并不能帮助我们处理重复,但是知道它期望什么,很容易创建一个辅助函数。我们可以让它接受一个值和一个值列表,将其与值进行比较,如果有任何匹配项,则返回 true。顺便说一句,这与检查列表是否包含特定元素 which is easier to search for 相同。
所以,给定这样一个简单的助手:
function contains(t, x)
for _, v in ipairs(t) do
if v == x then
return true
end
end
return false
end
我们可以这样写你的if:
if contains({"one", "two", "three", "four"}, var) then
--...
end
【讨论】: