有没有一种方法可以处理在lua中用作函数参数的全局变量?

时间:2019-05-19 14:18:13

标签: function parameters lua arguments global

我正在尝试将一些代码编写到函数中,以便可以轻松地重用它,从而增加了全局值。

问题在于可以操纵多个不同的全局变量,而我需要该函数能够处理每个全局变量。

我以为我可以将全局变量简单地放入函数的自变量中,但它似乎不起作用。可能是因为lua创建了它所需要的全局变量的副本。

是否有办法确保它操作的全局变量不仅仅是副本?

我已经尝试确保所有相关变量都保持局部状态,但是问题是它们都在循环中,因此需要保持在循环外部才能正确增加。

现在,我必须为每种增量情况编写一个单独的函数,如果可以的话,这有点不合时宜。

现在我必须做这样的事情

foo_time_1 = 0 

foo_time_2 = 0 
function foo_time_1(var) 

foo_time_1 += 2
 if foo_time < 2 then 
   sfx(02)
 end 
end

function foo_time_2(var)
 if foo_time_2 < 2 then 
  sfx(02) 
 end
end

这允许代码按预期运行,但是理想情况下,我希望代码看起来像这样:

foo_time = 0
foo_time_2 = 0

function foo_time_manipulator(global_var, len, sfx)

global_var += 2 
 if global_var < len then 
  play(sfx)
 end
end 

//so I can write

foo_time_manipulator(foo_time, 2, 02)
foo_time_manupulator(foo_time_2, 3, 02)

这样做的问题是,全局变量不会改变,因此在重新读取函数的每一帧时,声音效果都会不断循环,并且它会看到全局变量保持在用作参数的值处,而不是更新的变量。

很抱歉,如果这个问题的措词不当,很难说清楚。

lua中是否有任何方法可以操纵用作参数的全局变量?

一个好的限定词可能是该代码正在循环,因此需要一个外部变量作为计数器。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

function foo_time_manipulator(global_var_name, len, six)
 local global_var = _G[global_var_name]
 global_var = global_var + 2 
 if global_var < len then 
  play(sfx)
 end
end 

并像这样使用它

foo_time_manipulator("foo_time", 2, 02)
foo_time_manupulator("foo_time_2", 3, 02)