有没有比传递 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))
我 运行 这些要求有五个子案例的数字,每个子案例有四个子案例。这样的案例有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))