counter = { count = 0 } function counter.get(self) return self.count end function counter:inc() self.count=self.count+1 end print(counter.get(counter)) counter.inc(counter) print(counter.get(counter)) counter2={ count=4, get = counter.get, inc = counter.inc, } print(counter2:get()) counter.inc(counter2) print(counter2.get(counter2)) print() tb1 ={ "alpha","beta","gamma"} mt={} setmetatable(tb1,mt) print(getmetatable(tb1) == mt) print() function mt.__add(a,b) local result = setmetatable({},mt) for i=1,#a do table.insert(result,a[i]) end for i=1,#b do table.insert(result,b[i]) end return result end tb2={"aaa","bbb","ccc"} res=tb1+tb2 for i,v in ipairs(res) do print(v) end print() function mt.__unm(a) local result = setmetatable({},mt) for i=#a , 1 ,-1 do table.insert(result,a[i]) end return result end res=-tb1+tb2 for i,v in ipairs(res) do print(v) end print() function mt.__tostring(a) local result = "{" for i,v in ipairs(a) do result = result.." "..v end result = result.." } " return result end print(tb1) function mt.__index(tb1,key) print("there is no "..key.." in the table") return nil end print(tb1["fsy"]) function mt.__newindex(a,key,v) if( key == "haha") then error(" Stop laugh!",2) else rawset(a,key,v) end end tb1.haha="heihei"
运行结果:
0 1 4 5 true alpha beta gamma aaa bbb ccc gamma beta alpha aaa bbb ccc { alpha beta gamma } there is no fsy in the table nil lua: my_test.lua:166: Stop laugh! stack traceback: [C]: in function 'error' my_test.lua:160: in function <my_test.lua:158> my_test.lua:166: in main chunk [C]: ?
主要内容:面向对象特征,Lua 中面向对象,实例,实例,Lua 继承,实例,函数重写面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。 以下几种编程语言都支持面向对象编程: C++ Java Objective-C Smalltalk C# Ruby 面向对象特征 1) 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。 2) 继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以
面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。 以下几种编程语言都支持面向对象编程: C++ Java Objective-C Smalltalk C# Ruby 面向对象特征 1) 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。 2) 继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以
类 在 Lua 中,我们可以使用表和函数实现面向对象。将函数和相关的数据放置于同一个表中就形成了一个对象。 请看文件名为 account.lua 的源码: local _M = {} local mt = { __index = _M } function _M.deposit (self, v) self.balance = self.balance + v end functio
编程的抽象 我们将问题空间中的元素以及它们在方案空间的表示物称作“对象”(Object)。当然,还有一些在问题空间没有对应体的其他对象。通过添加新的对象类型,程序可进行灵活的调整,以便与特定的问题配合。与现实世界的“对象”或者“物体”相比,编程“对 象”与它们也存在共通的地方:它们都有自己的状态(state)和行为(behavior)。比如,狗的状态有名字、颜色等,狗的行为有叫唤、摇尾等。 软件世
在至今我们编写的所有程序中,我们曾围绕函数设计我们的程序,也就是那些能够处理数据的代码块。这被称作面向过程(Procedure-oriented)的编程方式。还有另外一种组织起你的程序的方式,它将数据与功能进行组合,并将其包装在被称作“对象”的东西内。在大多数情况下,你可以使用过程式编程,但是当你需要编写一个大型程序或面对某一更适合此方法的问题时,你可以考虑使用面向对象式的编程技术。 类与对象是面
面向对象编程是一种命令式编程,主要有基于类和基于原型两种方式。 基于类的面向对象语言是建立于类和实例这两个不同实体的概念之上: 类定义了一些可使特定的对象集合特征化的属性,并且是抽象的,而不是其所描述的对象集合中的任何特定的个体; 实例是一个类实例化的结果,是其成员之一,并且具有和父类完全一致的属性,不多不少。 基于类和基于原型的面向对象语言之间的不同大致可以概括为: 对比项 基于类 基于原型 类