有没有比传递 40 个对象 table 更简单的方法?

Is there a simpler way than to pass a 40-object table?

我 运行 这些要求有五个子案例的数字,每个子案例有四个子案例。这样的案例有200多个,下面只展示了其中一个,所以这将是几千行代码。 (这是示例代码,当然,数字不会完全相同。)

  elseif case1 then
                      if u <= 0 then if w == 0 then return B(2,3), B(3,4)
                                 elseif w == 1 then return B(2,3), B(3,4)
                                 elseif w == 2 then return B(2,3), B(3,4)
                                 elseif w >= 3 then return B(2,3), B(3,4)
               elseif if u == 1 then return LimitCheck(if w == 0 then return B(2,3), B(3,4)
                                 elseif w == 1 then return B(2,3), B(3,4)
                                 elseif w == 2 then return B(2,3), B(3,4)
                                 elseif w >= 3 then return B(2,3), B(3,4)
               elseif if u == 2 then return LimitCheck(if w == 0 then return B(2,3), B(3,4)
                                 elseif w == 1 then return B(2,3), B(3,4)
                                 elseif w == 2 then return B(2,3), B(3,4)
                                 elseif w >= 3 then return B(2,3), B(3,4)
               elseif if u == 3 then return LimitCheck(if w == 0 then return B(2,3), B(3,4)
                                 elseif w == 1 then return B(2,3), B(3,4)
                                 elseif w == 2 then return B(2,3), B(3,4)
                                 elseif w >= 3 then return B(2,3), B(3,4)
               elseif if u == 4 then return LimitCheck(if w == 0 then return B(2,3), B(3,4)
                                 elseif w == 1 then return B(2,3), B(3,4)
                                 elseif w == 2 then return B(2,3), B(3,4)
                                 elseif w >= 3 then return B(2,3), B(3,4)

我想我会很聪明,将重复的代码划分开来,让子函数来分解案例:

  local function LimitCheck(arg)
    if w <= 0 then return arg[1], arg[2]
    elseif w == 1 then return arg[3], arg[4]
    elseif w == 2 then return arg[5], arg[6]
    elseif w >= 3 then return arg[7], arg[8]
    end
  end
  local function Limits(arg)
    if u == 0 then return LimitCheck({arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],})
    elseif u == 1 then return LimitCheck({arg[9],arg[10],arg[11],arg[12],arg[13],arg[14],arg[15],arg[16],})
    elseif u == 2 then return LimitCheck({arg[17],arg[18],arg[19],arg[20],arg[21],arg[22],arg[23],arg[24],})
    elseif u == 3 then return LimitCheck({arg[25],arg[26],arg[27],arg[28],arg[29],arg[30],arg[31],arg[32],})
    elseif u == 4 then return LimitCheck({arg[33],arg[34],arg[35],arg[36],arg[37],arg[38],arg[39],arg[40]})
    end
  end

然后是main函数return需要一口气知道的内容:

  elseif case1 then
    return Limits({B(5,6),B(7,8),   B(5,6),B(5,6),  B(5,6),B(5,6),  B(5,6),B(5,6),
                   B(5,6),B(5,6),   B(5,6),B(5,6),  B(5,6),B(5,6),  B(5,6),B(5,6),
                   B(5,6),B(5,6),   B(5,6),B(5,6),  B(5,6),B(5,6),  B(5,6),B(5,6),
                   B(5,6),B(5,6),   B(5,6),B(5,6),  B(5,6),B(5,6),  B(5,6),B(5,6),
                   B(5,6),B(5,6),   B(5,6),B(5,6),  B(5,6),B(5,6),  B(5,6),B(5,6)})

问题是,这是一个每次都传递的 40 条目 table 对象,对于每秒可能发生 100 次的请求来说,这是一项相当庞大的任务。它 return 是一堆未使用的东西。 请问有没有节省资源的方法呢

下面是一个如何使用查找 table 执行此操作的示例。 如果结构允许,您可以对其进行硬编码或从代码构建它。

local LUT = {
  [0] = {
    [0] = "a",
    [1] = "b",
    [2] = "c",
    [3] = "d",
  },
  [1] = {
    [0] = "e",
    [1] = "f",
    [2] = "g",
    [3] = "h",
  },
  [2] = {
    [0] = "i",
    [1] = "j",
    [2] = "k",
    [3] = "l",
  },
  [3] = {
    [0] = "m",
    [1] = "n",
    [2] = "o",
    [3] = "p",
  },
  [4] = {
    [0] = "q",
    [1] = "r",
    [2] = "s",
    [3] = "t",
  },
}

function lookup(u, w)
  -- we only accept u <= 5
  if math.type(u) ~= "integer" or u > 4
   -- and w >= 0
    or math.type(w) ~= "integer" or w < 0 then
    return
  end
  return LUT[math.max(0, u)][math.min(3, w)]
end

print(lookup(-5, 3))