function - 有没有一种方法可以操作你用作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 中是否有任何方法可以操作用作参数的全局变量?
一个好的限定词可能是这段代码正在循环,因此需要一个外部变量作为计数器。
解决方案
你可以试试这个:
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)
推荐阅读
- c# - 在 C# 中模拟 CancellationTokenSource
- azure-active-directory - 关于 MS Graph API“创建组”的问题
- android - android studio 尺寸问题
- git - POST git-receive-pack (chunked) 致命:远程端意外挂断
- python - 对于超过 1000 个结果,for 循环 for(django 或原始查询集)执行缓慢
- python - print('%.70f' % (0.2 + 0.1)) 输出中的 36 位补丁
- azure-data-factory - 如何在 Azure 数据工厂中将分析单元 (AU) 设置为 U-SQL 活动
- node.js - 如何修复仅在节点应用程序上加载主页,其他路由给出 404
- linux - mkdir 在 docker 文件中失败,但在手动运行时工作正常
- javascript - 不明确的括号指令“this.fn.bind(this)(super.fn(...args)”