功能我使用Lua的游戏引擎中。我经常需要在给定的时间间隔内完成任务,而蛮力的方式就是为我需要做的每件事情做一个变量来跟踪我最后一次做的事情。这使得我的代码变得杂乱无章,因为他们更注重工作而不是面向目标。所以我有一个想法来做一个功能,会自动为我做这个。我需要提供的是间隔和一个函数,我定义了在此间隔内需要完成的内容。 (在我的例子中,我使用“类”,所以我也定义了对象)。唯一标识在Lua
当然,我还需要做出最后的更新变量来跟踪每一个,但如果我能掩盖这个功能里面,然后我的代码写入到使用它只是变得更简单。所以在我传入的obj中,我需要为每次调用函数时的每条语句创建一个唯一变量。我想我可以使用回调函数的字符串名称,但每次都有所不同,因为它是一个匿名函数。 反正从我可以生成一个唯一的变量名,所以我没有使用这个系统时,任何跟踪匿名函数?因为同一个对象不会有2个匿名函数会是相同的,所以函数本身可能会有一些散列?不知道如果你能做到这一点在Lua虽然
function DoEvery(interval, obj, method)
-- somehow I need a way to uniquely ID the passed in method so I can make a variable on the passed in obj that tracks it's last time called
print(tostring(method)) -- this gives a new address each cycle so that won't work
end
Script = {}
function Script:Create()
local obj = {}
obj.name = "Mike"
for k,v in pairs(Script) do
obj[k] = v
end
return obj
end
function Script:Update()
DoEvery(250, self, function(self)
print(self.name)
end)
end
local script = Script:Create()
script:Update()
script:Update()
script:Update()
定义命名的本地函数'功能print_name(个体经营)打印(self.name)end'外'脚本:更新()'和'使用DoEvery(250,自我,print_name)''作为脚本:更新( )'身体。因此,每次调用'script:Update()'时,您将在'DoEvery()'函数中具有相同的'method'参数。您可以使用'tostring(method)'或'method'本身作为'script'对象内的键来存储上次访问时间。 –
我希望函数是内联的,所以当你阅读代码时,你不必去别的地方看看发生了什么。我希望它能像lambda表达式那样。 – user441521
再添加一个参数 - 您打算简短说明:'DoEvery(250,“打印名称”,自我,函数(个体经营)......结束)'这个字符串参数将作为一个评论(简化代码的理解)并作为一个独特的关键。 –