lua中的此代码将函数应用于值
function Apply(f, value)
return f(value)
end
然后我可以像这样使用它对我的游戏对象应用任意函数调用
Apply(Draw, GameObject)
Apply(Update, GameObject)
是否有可能做我想做的事情,可能是错误的,调用更高阶的方法
function GameObject:Apply(f)
return self:f()
end
我最终想做的是有一个GameObjects表,我可以批量调用Methods on。所以使用这个"更高阶的方法"甚至可能不存在的概念我会创建执行以下操作的代码。
...
--Create the batch object with three bullets in it
BatchGameObjects = BatchGameObject:new(Bullet1, Bullet2, Bullet3)
--Call equivelent to
--Bullet1:DrawMethod()
--Bullet2:DrawMethod()
--Bullet3:DrawMethod()
--Bullet1:UpdateMethod()
--Bullet2:UpdateMethod()
--Bullet3:UpdateMethod()
BatchGameObjects:Apply(DrawMethod)
BatchGameObjects:Apply(UpdateMethod)
答案 0 :(得分:3)
如果您正在处理其他对象上的方法,您可能希望传递函数NAME,因为不同对象上具有相同名称的方法可能会解析为非常不同的函数。
function BatchGameObjects:Apply(function_name)
-- ... or iterate on objects in any other way that matches how you store them ...
for idx = 1, #self.object_list do
local object = self.object_list[idx]
object[function_name](object)
end
end
答案 1 :(得分:2)
function GameObject:Apply(f)
return f(self)
end