Lua:我需要在 if 中重复变量吗?

当我说 if var == "one" or var == "two" or var == "three" or var == "four" then 并且 var 总是相同的,我能否通过以下方式缩短它: if var == "one" or "two" or "three" or "four" then

我需要使用括号吗?

原文链接 https://stackoverflow.com/questions/70507236

点赞
stackoverflow用户752976
stackoverflow用户752976

Lua 的 if 语句需要一个单一的值。该值会被转换为布尔值 truefalse,以决定 if 语句的行为。

因此,你可以想象你的 if 语句像这样:

condition = var == "one" or var == "two" or var == "three" or var == "four"
if condition then
    --...
end

因此 if 并不能帮助我们重复执行某些操作,但是我们可以创建一个帮助函数,因为我们知道 if 语句所期望的值。我们可以让这个函数接收一个值和一个值列表,将它与这些值进行比较,并在匹配时返回 true。这也正好是检查列表是否包含特定元素的方法,更容易找到

因此,给出一个简单的帮助函数:

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
2021-12-28 12:49:13
stackoverflow用户573255
stackoverflow用户573255

我们可以利用表格(tables)。特别的,如果 some_table不包含 some_key,那么some_table[some_key]会返回 nil,这是一个假值。

例如:

if ({one=1, two=1, three=1, four=1})[var] then

我用了 1 ,因为它打字很短,但你可以使用除了 nilfalse 以外的任何值,因为这两个值是 Lua 中唯一的假值。

这将每次在求值时都创建一个新的表格,因此,如果你想经常检查它(例如在紧密的循环中),则可能值得在循环 创建表格:

local CONDITION = {one=1, two=1, three=1, four=1}
...
   -- 在循环内:
   if CONDITION[var] then
2021-12-28 12:57:45