首页 > 解决方案 > 有没有一种方法可以操作你用作lua中函数参数的全局变量?

问题描述

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

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

我以为我可以简单地将全局变量放入函数的参数中,但它似乎不起作用。可能是因为 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 中是否有任何方法可以操作用作参数的全局变量?

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

标签: functionparametersluaargumentsglobal

解决方案


你可以试试这个:

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)

推荐阅读