元表概念 Lua中,面向对向是用元表这种机制来实现的。元表是个很“道家”的机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua的面向对象使用自如,才能在写Lua代码的高级语法时游刃有余。 lua的metatable的官方解释, 1. 每个table和每个full user data都可以有自己的metatable,并可通过setmetatable和getm
云风的lua oo 实现方法 http://blog.codingnow.com/2006/06/oo_lua.html 无法在子类的函数中使用super:xxx 调用父类的函数。 1.直接用父类调用 [java] view plain copy print ? base_type=class() -- 定义一个基类 base_type function base_type:c
--[[ 实现类的用法 ]]-- local _class={} function class(super) local class_type={} class_type.ctor=false class_type.super=super class_type.new=function(...) local obj={}
项目组有个很好的习惯,每个礼拜都开展技术交流活动,要求由其中一个同事作为主讲人,以该主讲人所擅长的技术方面为主题,进行交流。收到这个任务已经月余,但最近实在太忙,只得趁周末准备一下。学习lua已经是很久远的事情了,虽然每天都在运用,而且应该说运用上还是挺溜的,但毕竟运用自如与以简易明了的语言表达出来还是差距挺大,有些东西虽然理解但要表达出来还是挺有难度,再加上时间紧迫,这里就当时抛砖引玉吧,希望大
元表概念 Lua中,面向对向是用元表这种机制来实现的。元表是个很“道家”的机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua的面向对象使用自如,才能在写Lua代码的高级语法时游刃有余。 lua的metatable的官方解释, 1. 每个table和每个full user data都可以有自己的metatable,并可通过setmetatable和getm
http://www.2cto.com/kf/201402/280177.html lua语言中没有真正意义的面向对象,而是通过函数模拟面向对象。我们来看是怎么一步步演化的。 1. 基本的函数 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 People = {} function People.sayHi() print( "Hi, nic
本质就是把利用__index和__newindex把C++里边的虚表机制重新实现了一遍 主要步骤: 1. 建立子类自己的虚表:表中包括子类中定义的成员函数。该虚表是所有对象公用的。 2. 在子类的虚表中,添加指向基类虚表的机制。就是当子类中访问不到该方法,就到基类虚表中寻找。该步骤实现了基类方法的继承 3. 当子类实例化时,会先实例化基类的成员数据,然后实例化的子类的成员数据。该步骤实现了基类成员
元表概念 Lua中,面向对向是用元表这种机制来实现的。元表是个很“道家”的机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua的面向对象使用自如,才能在写Lua代码的高级语法时游刃有余。 首先,一般来说,一个表和它的元表是不同的个体(不属于同一个表),在创建新的table时,不会自动创建元表。 但是,任何表都可以有元表(这种能力是存在的)。 e.g. t
看云峰博客实现lua重载普通函数,也来个实现面向对象的重载,其实没什么用处。展示一下Lua的灵活性 local EJShapeImp = {}
EJShapeImp.__curFuncName = nil
function EJShapeImp.dispatch(self, ...)
local funcName = EJShapeImp.__curFuncName
local n = sel
源码如下,核心是一下两句 self.__super = getmetatable(Rect)
self.__super.__init(self,x,y) Shape = {}
function Shape:create(x, y)
local s = {}
setmetatable(s, self)
self.__index = self
s:__init(x, y)
retur
local ShapeImp = {}
function ShapeImp:calcArea()
return self.w * self.h
end
Shape = {}
function Shape:create()
local shape = {x=10, y=20, w = 3, h = 4}
setmetatable(shape, self)
self.
Lua 面向对象的原理 lua本身是没有类的。但lua有元表和元方法,通过元表和元方法我们可以实现类的一些特征。 father = {house = 1}
son = {car = 2}
function father:printHouse()
print("father house is ",self.house)
end
function father:printHello()
类,是面向对象编程语言里极为重要的概念,是进行面向对象编程的基石。Lua并不是面向对象编程语言,Lua中的面向对象都只是对真正的面向对象的一种模拟,Lua之所以能够实现这种模拟,源于Lua中的三剑客:table,metatable,__index。 首先,我们先来了解一下类的定义。在现实世界中,经常有属于同一类的对象。例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多
在Lua中模拟类的继承行为,可以通过setmetatable方法来实现。首先,我们就先实现一个基类Vehicle,然后再定义该基类的一个子类Bicycle,基类的定义与之前介绍的类的定义方法是一致的,如果你对此还不是很熟悉,可以先回顾一下《LUA面向对象程序设计(一)类》。 基类Vehicle的定义: --类的属性 local Vehicle = { wheels = 4,
先来了解一下多态的概念。在面向对象语言中,多态本质就是运行时绑定,比如有一个父类BaseClass,它有2个子类subClass1,subClass2。BaseClass有一个方法func(),两个子类都重写了这个方法。那么我们可以定义一个BaseClass的引用obj,让它指向一个子类的对象,比如BaseClass obj = new subClass1();那么我们调用obj.func()
在Lua中实现多重继承,可以有多种方案,在pil中,lua作者提供了一种实现多种继承的方案,但我个人认为,这种方案虽然简洁,但并不算得优雅。后来云风(江湖传说很流弊的人)给出了另外一种既简洁又不失优雅的解决方案,其实现方案,深刻把握了oo的思想。但是,风云(我觉得比云风顺口多了-:-)的实现并没有考虑多重继承的情况,在这里,在风云的实现方案的基础上加以扩展,以支持多种继承的情况。 下面先来
勤奋努力,持之以恒! 表: Lua中的数据结构,可以存放各种域。 由于Lua中的函数也是第一类值,于是表可以存放属性域和方法域,因此表可以描述一个类。 元表: 元表也是一个表,可以设置给一个本表。 一个表作为元表概念存在的意义在于它可以通过定义自身的一系列元方法来改变本表的行为。 如果一个元表不被设置给一个本表,那么他是没有意义的,一个本表的元表可以是自身。 元方法: Lua给表预备了一些
lua本不是面向对象语言 做法是“模拟”面向对象~ 父类文件: --"这是父类";
local Parent = class("Parent");
function Parent:ctor()--构造
self.Name = "名字";
print("父类的构造函数")
end
function Parent:init()--初始化
--self.Name = 10;
一直不知道lua 的metatable怎么用,偶然练习,发现还可以结合面向对象的概念一起用。分享最基础的代码如下: -- filename "test.lua"
local t = {}
t.__index = t
function t:new(name, age)
local obj = {
__name = name,
__age = age,
}
self.tab = {n