ClassTool.lua local function search (k, plist)
for i = 1, table.getn(plist) do
local v = plist[i][k]
if v then return v end
end
end
function createClass (...)
local c = {}
定义一个函数,返回值是一个对象。 这个就像显示定义一个构造函数一样,只不过最后要return一个对象。 在函数里面定义对象的变量名和函数。 注意: 在创建函数内部使用 self加引号来表示对象的函数(self:getName()) 使用self加点来使用对象的变量。(self.name) 成员方法的定义 function obj:method(a1, a2, ...) …
lua类: a = {} function a:new(o) o = o or {} setmetatable (o,self) self.__index = self return o end function a:output(x) print (x) end b = 'hi' mm = 'hello' a:output (b) --hi c = a:new() function c:out
Son继承Fathter,Monther,Father和Monther继承People 单继承实现 People.lua local People = {}
function People:new()
-- body
local Obj = {} --创建新的表作为实例的对象
setmetatable(Obj,{__index=People}) --设置People为对象原表的__
在Lua中模拟类的继承行为,可以通过setmetatable方法来实现。首先,我们就先实现一个基类Vehicle,然后再定义该基类的一个子类Bicycle,基类的定义与之前介绍的类的定义方法是一致的,如果你对此还不是很熟悉,可以先回顾一下《LUA面向对象程序设计(一)类》。 基类Vehicle的定义: --类的属性 local Vehicle = { wheels = 4,
在Lua中实现多重继承,可以有多种方案,在pil中,lua作者提供了一种实现多种继承的方案,但我个人认为,这种方案虽然简洁,但并不算得优雅。后来云风(江湖传说很流弊的人)给出了另外一种既简洁又不失优雅的解决方案,其实现方案,深刻把握了oo的思想。但是,风云(我觉得比云风顺口多了-:-)的实现并没有考虑多重继承的情况,在这里,在风云的实现方案的基础上加以扩展,以支持多种继承的情况。 下面先来
勤奋努力,持之以恒! 表: Lua中的数据结构,可以存放各种域。 由于Lua中的函数也是第一类值,于是表可以存放属性域和方法域,因此表可以描述一个类。 元表: 元表也是一个表,可以设置给一个本表。 一个表作为元表概念存在的意义在于它可以通过定义自身的一系列元方法来改变本表的行为。 如果一个元表不被设置给一个本表,那么他是没有意义的,一个本表的元表可以是自身。 元方法: Lua给表预备了一些
今天在看文章的时候,突然发现这个神奇的功能,之所以神奇是因为在开始我没有想过在lua中会有这个功能。 简言之,就是基类与派生类的关系。lua中称之为protoType模式 如图:
1、简单的面向对象函数 function create(name,id)
local obj = {name = name,id = id}
function obj:setName(name)
self.name = name;
end
function obj:getName()
一些面向对象的语言中提供了类的概念,作为创建对象的模板。在这些语言里,对象是类的实例。Lua 不存在类的概念,每个对象定义他自己的行为并拥有自己的形状(shape) 。在这些语言中, 对象没有类。 相反, 每个对象都有一个 prototype(原型) ,当调用不属于对象的某些操作时,会最先会到 prototype 中查找这些操作。在这类语言中实现类(class)的机制,我们创建一个对象,作为其它对
lua对于面向对象的支持主要通过table来实现,每个table都是一个对象,对于继承,lua有元表的机制,通过setmetatble()可以来修改元表, #元表是什么? 元表其实就是在本身找不到的东西,就会去元表中查找。 #__index元方法: __index方法是用来确定一个表在被作为元表时的查找方法。它的值可以使函数也可是是table,一般用法为: <!-- lang: lua -->
l
table_Base = {}
function table_Base.getValue()
return -1;
end
function table_Base.newObject(o)
o = o or {};
setmetatable(o, self);
o.__index = self;
return o;
end
function table_Base.Name()
pr
quickcocos 中让 Lua有了”继承”的能力,看起来更像OO语言了 通过测试,发现其基类的成员变量和成员函数都可以被很好的继承下来 例子 ------------------基类-----------------------
local base = class("base")
function base:ctor()
print("---base.ctor---")
se
由于游戏中monster和hero有一部分共同的属性,例如hp、mp、攻击力等,还有一部分共同的属性行为,主要是动作。因此用到了继承。 写了一个小demo测试了一下。 父类parent,两个子类childA和childB,父类有一个自己的属性p, 两个子类也分别有自己对应的属性c。 先看看parent的实现: <span style="font-size:12px;">local parent =
local _class={}
function class(super)
local class_type={}
class_type.ctor=false
class_type.super=super
class_type.new=function(...)
local obj={}
do
-- 递归调用构造函数,实现构造基类的数据
local cre
--[[ lua中如何实现实现伪承 ]]
--
--setmetatable(a,b)
--[[ Account = {num = 10} function Account:new( o ) o = o or {} setmetatable(o,self) --Account是o的原型 self.__index = self -- return o end function Account:sho
--创建一个Account类
local Account = {
balance = 0
}
function Account:new(o)
if o == nil then
o = {}
end
setmetatable(o, self)
self.__index =
local a={x=5}
function a:func()
print("func")
end
a.__index=a--
local b={t=6}
--[[
function b:func()
print("func111")
end
--]]
setmetatable(b,a)-- 吧a设置为b的元表,b中未查找到 就到a中查找
--b相当于继承了a
prin
一、table对象 1.1 table有自己的操作 #!/usr/bin/env lua
--table Account
Account = { balance = 0 }
function Account.withdraw(v)
Account.balance = Account.balance - v
end
--
a = Account; --Account = nil
local TBaseClass = {
a = 1,
b = 2,
}
function TBaseClass:fun1()
print("TBaseClass:fun1");
print(tostring(self));
print(tostring(TBaseClass));
print(self.a.." -> self.a");
print(self.b.." -> se