高阶"方法"在卢阿

时间:2014-09-28 19:10:44

标签: class lua

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)

2 个答案:

答案 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