• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua编程示例(二):面向对象、metatable对表进行扩展

Lua编程示例(二):面向对象、metatable对表进行扩展

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lua metatable,lua metatable index,metatable,无法确定 metatable,lua如何实现面向对象等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
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"
</div>

 
运行结果:

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]: ?
</div>

 

</div>

您可能想查找下面的文章:

  • Lua编程示例(二):面向对象、metatable对表进行扩展
  • Lua中的metatable介绍
  • Lua中的metatable详解

相关文章

  • Lua中变相实现continue跳出循环
  • Lua中的运算符简明总结
  • Lua协同程序(COROUTINE)运行步骤分解
  • Lua的table库函数insert、remove、concat、sort详细介绍
  • Lua的协程(coroutine)简介
  • lua中操作json数据的方法
  • Lua教程(二):C++和Lua相互传递数据示例
  • 浅谈Lua语句
  • Lua教程(六):绑定一个简单的C++类
  • Lua教程(十四):字符串库详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • lua文件操作详解
    • Lua的内存管理浅析
    • 实例讲解Lua中pair和ipair的区别
    • Lua在windows下的安装及环境配置
    • 使用Lua编写Web端模板引擎的实例代码分享
    • Lua中的运算符简明总结
    • Lua中关于求模与求余的区别介绍
    • Lua中获取table长度问题探讨
    • Lua中的捕获机制和转换技巧介绍
    • C++遍历Lua table的方法实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有