如何在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中能够操作作为参数使用的全局变量?

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

点赞
用户107090
用户107090

你可以尝试使用以下代码:

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)
2019-05-19 15:10:08