Lua编程示例(二):面向对象、metatable对表进行扩展实用指南
平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Lua编程示例(二):面向对象、metatable对表进行扩展”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
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编程示例(一):select、debug、可变参数、table操作、error
相关资讯
-
10.19
基于Vue3+DeepSeek实现方式流式打字机效果实用指南
-
10.19
Rust并发编程怎么实现协程?异步任务调度做法完整指南
-
10.19
OpenClaw安装部署及应用场景教程(2026最新完整版)实用指南
-
10.19
Rust并发编程入门:多进程创建与等待子进程的实用指南
-
10.18
vue3中的事件修饰符完整指南
-
10.17
Codex CLI 登录失败排查流程:从命令状态、浏览器回调到脱敏支持记录实用指南
游戏推荐
推荐专题
热门阅读
-
-
- 举例简介Lua中函数的基本用法实用指南
- 09.05
-
-
- 讯飞智作克隆自己声音一句话复刻如何开启
- 09.03
-
-
推荐下载
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏