源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Lua基础教程之表(Table)学习笔记

  • 时间:2022-08-12 20:35 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Lua基础教程之表(Table)学习笔记
[b]表[/b]
[u]复制代码[/u] 代码如下:
    a = { }     b = { x = 1, ["hello, "] = "world!" }     a.astring = "ni, hao!"     a[1] = 100     a["a table"] = b     function foo()     end     function bar()     end     a[foo] = bar     --分别穷举表a和b     for k, v in pairs(a) do         print(k, "=>", v)     end     print("----------------------------")     for k, v in pairs(b) do         print(k, "=>", v)     end
[u]复制代码[/u] 代码如下:
--输出结果 1 => 100 a table => table: 003FB3A0 function: 003FCBB0 => function: 003FCBD0 astring => ni, hao! ---------------------------- hello,  => world! x => 1
[b]定义表(Table)的方式:a = {}, b = {…}[/b] [b]访问表的成员:[/b]通过“.”或者“[]”运算符来访问表的成员。注意:表达式a.b等价于a[“b”],但不等价于a[b]
[u]复制代码[/u] 代码如下:
    local b = {"h", 20} --《=》 {[1]="h", [2]=20}  《=》local b={};b[1]="h";b[2]=20     local d = {x=0, y=0}  --《=》local d = {}; d.x=0; d.y=0 《=》local d = {}; d["x"]=0; d["y"]=0
[b]表项的键和值:[/b]任何类型的变量,除了nil,都可以做为表项的键。从简单的数值、字符串到复杂的函数、表等等都可以;同样,任何类型的变量,除了nil,都可以作为表项的值。给一个表项的值赋nil意味着从表中删除这一项,比如令a.b= nil,则把表a中键为“b”的项删除。如果访问一个不存在的表项,其值也是nil,比如有c = a.b,但表a中没有键为“b”的项,则c等于nil。 [b]一种简单的对象实现方式 [/b]
[u]复制代码[/u] 代码如下:
function CreateStudent(ID,Name)    local Obj={id=ID,name=Name};     function Obj:GetID()     return self.id;  end  function Obj.GetName(self)     return self.name;  end  function Obj:SetID(ID)     self.id=ID;  end  Obj.SetName=function(self,Name)  self.name=Name  end  return Obj; end s1=CreateStudent(1,"andy"); print("s1'id=",s1:GetID(),"s1'name=",s1.GetName(s1)) s1:SetID(2); s1.SetName(s1,"lili"); print("s1'id=",s1:GetID(),"s1'name=",s1:GetName()) --输出结果 --s1'id= 1 s1'name= andy --s1'id= 2 s1'name= lili
[b]对象工厂模式:[/b]如上面代码的create函数 [b]用表来表示对象:[/b]把对象的数据和方法都放在一张表内,虽然没有隐藏私有成员,但对于简单脚本来说完全可以接受。 [b]成员方法的定义:[/b]function obj:method(a1, a2, ...) … end <==>function obj.method(self, a1, a2, ...) … end <==>obj.method = function (self, a1, a2, ...) … end [b]成员方法的调用:[/b]obj:method(a1, a2, …) <==>obj.method(obj, a1, a2, ...) [b]简单继承[/b]
[u]复制代码[/u] 代码如下:
function CreateStudent(ID,Name)    local Obj={id=ID,name=Name};     function Obj:GetID()     return self.id;  end  function Obj.GetName(self)     return self.name;  end  function Obj:SetID(ID)     self.id=ID;  end  Obj.SetName=function(self,Name)  self.name=Name  end  return Obj; end function CreateClassStudent(ID,Name,Class)    local obj=CreateStudent(ID,Name);     obj.class=4;    function obj:GetClass()       return self.class;    end    function obj.SetClass(self,class)       self.class=class;    end    return obj; end s2=CreateClassStudent(1,"andy",5); print("s2'class=",s2.GetClass(s2))
优点:简单、直观 缺点:传统、不够动态
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部