Lua 通过元表可以实现面向对象。当然,这种面向对象并不是真的面向对象,而是类似于一种原型模式,从一个已有的table中clone出另一个table。Lua自身是不支持面向对象的。本文来写一个简单的Lua面向对象实现。
local class_mt = {}
-- class_mt.__index = function(self, key) 也可以
function class_mt:__index(key)
return self.__baseclass[key]
end
class = setmetatable({ __baseclass = {} }, class_mt)
function class:new(...)
local c = {}
c.__baseclass = self --每一个新类的baseclass都是class,调用new的时候会去找class的new。
setmetatable(c, getmetatable(self))
if c.init then
c:init(...)
end
return c
end
上面的代码就是一个简单的面向对象实现。外部接口是class:new() 。在这个函数里面,我们创建了一个table,是我们的目标,然后给这个table设置元表为class这个table的元表,而class的元表是class_mt,也就是说,我们新类的元表是class_mt,然后调用init()方法来初始化,这是我们的构造函数。使用方法如下:
Mass = class:new()
function Mass:init(x, y)
self.vel

本文介绍了如何在Lua中利用元表实现一个简单的面向对象机制,这种实现更像是原型模式。通过`class_mt`元表和`class:new()`方法,创建了一个能够初始化并具备特定行为的对象。示例中定义了`Mass`类,包含`init`、`applyForce`和`simulate`等方法,用于演示对象的创建和使用。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



