【发布时间】:2019-05-19 14:18:13
【问题描述】:
我正在尝试将一些代码写入一个函数,以便可以轻松地重用它,从而增加全局值。
问题是可以操纵几个不同的全局变量,我需要该函数能够处理每一个。
我以为我可以简单地将全局变量放入函数的参数中,但它似乎不起作用。可能是因为 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 中是否有任何方法可以操作用作参数的全局变量?
一个好的限定词可能是这段代码正在循环,因此需要一个外部变量作为计数器。
【问题讨论】:
-
考虑使用局部变量和闭包。
-
@lhf 是的,看来我必须为这个特定项目这样做。
-
回答标题问题:否。实际参数是计算为值的表达式。仅由变量组成的表达式是没有特殊处理的特殊情况。被调用函数无法访问为获取实际参数值而计算的表达式。
标签: function parameters lua arguments global