Welcome Guest ( Log In | Register )

欢迎访问本站。游客仅能浏览首页新闻、版块主题、维基条目与资源信息,需登录后方可获得内容发布、话题讨论、维基编辑与资源下载等权限。若无账号请先完成注册流程。
 
Reply to this topicStart new topic
> Lua进阶:元表, Metatable
bx_bob
2011-08-11, 15:38
Post #1


比非主流还非主流的Lua原教旨主义机械师
Group Icon
 817
   15

Group: Avatar
Posts: 416
Joined: 2007-07-25
Member No.: 14794


元表可以说是Lua最主要的进阶特性。但是这部分网上的教程比较多,我写到这里感觉莫名倦怠...
---------

在前面的这一章里,提到了表。
CODE
bx={
  "男人",
  status="活的",
  finger={
    left=5,
    right=5
    },
  totalfinger=function(self) return self.finger.left+self.finger.right end
}
这个就是一个典型的Lua表,它和其他语言中的表的最大不同在于,函数也能作为成员塞进去,这得益于函数也是变量的特性。接下来,我们引入metatable。
CODE
bx={
  "男人",
  status="活的",
  age=20,
  finger={
    left=5,
    right=5
    },
  totalfinger=function(self) return self.finger.left+self.finger.right end
}

m={}
m.__add=function (i_table,i_num)
    if type(i_num)~="number" then error("only number can be added") end
    i_table.age=i_table.age+i_num
    return i_table
end

setmetatable(bx,m)

print(bx.age)
bx=bx+3
print(bx.age)
显示的结果是:
20
23

嗯,加入了这个metatable之后,这个叫bx的表就可以加上一个数字了。
在metatable的__add方法里面,定义了加上数字时,把数字加到.age属性上。

This post has been edited by bx_bob: 2011-11-18, 15:48
TOP
Fast ReplyReply to this topicStart new topic
 


Time is now: 2021-10-27, 15:48