我使用Lua创建一个"插件"对于基于Linux的操作系统。该程序包含一个C函数,该函数当前是递归的(不是故意的)。此时,每次调用该函数时,它都会提供4-5次结果。
我想问一个关于递归函数及其结果的问题。是否可以采用递归函数的多个(相同)结果并仅使用其中一组结果?
示例:(我将进入状态"操作系统功能"帮助指出已经编码到操作系统中的内容我将Lua集成到其中)
function abc123() -- OS function based in the OS
local names = os_Names() -- OS function
local index, var = os_Rows() -- OS function to pull vars from file
for k,v in pairs(names) do
index2, var2 = os_Rows(k) -- OS function to pull vars from file
if var2 ~= var then
os_Rows(k,var2,var) -- RECURSIVE OS function
cnt = 1
while cnt <= 4 do
data_tbl = file_info(x,y,z) -- personal function to grab info and return a table
info_tbl[data_tbl.id]=data_tbl
loop_erase(info_tbl) -- my thoughts if possible
cnt = cnt + 1
end
end
end
end
function loop_erase(entry) -- can something like this work????
local order = {[1]="",[2]="",[3]="",[4]=""}
for k,v in ipairs(entry) do
for key,value in ipairs(order) do
if key == k then
value = v
end
end
end
end
有四个从属设备,其名称保留在os_Names
功能中。在四个从站中的任何一个上选择特定文件时,将调用os_Rows
函数并将index, var
设置为文件的位置和名称。此时,for
循环会检查其他设备上当前设置的内容。如果它与index, var
不匹配,则它会选择该从属设备上的var
文件。
现在,一切正常,直至if var2 ~= var
。如果变量在所有四个names
中都不匹配,那么它会执行导致问题的os_Rows(k,var2,var)
操作系统功能。此时,执行了正确的功能,但它执行了四次。这发生在四个文件中的每一个上 - 四次是一个指数问题!所以这是我试图阻止的递归动作。最终,所有这些信息都被传输到外部设备(通过以太网),我担心这会导致通信问题。
现在我知道我对此的处理可能非常简单,可以由专业程序员缩短。但是现在,function abc123()
连续四次返回四个结果(这很好)(这很糟糕)。我的想法是,我会尝试将它们放入表中,如果该表的键匹配,那么它只会覆盖它们。
a)我不确定是否有可能这样做,因为到目前为止我的尝试还没有成功
b)如果有可能,我认为function loop_erase
将是可行的方法。
我认为这是不可能的,因为每次递归函数发生时,它仍然会调用它链接到的其他函数。我一直在尝试不同的方法而不去。