lua零散知识

1.loadfile dofile require 区别:
loadfile 只加载不编译(不运行代码)dofile (加载且编译) require加载且编译,检测加载编译一次后不再编译(只运行一次代码)

2.八大数据类型

nil boolean string function table unserdata thread number

3.闭包

外部函数+内部函数(内部函数应用外部函数的局部变量upvalue)例如 table.sort()

4.元表和元方法
元表本质就是一个普通的table表,它定义了原始值某些特殊操的行为,它里边游戏特殊键值,对应的做某些特殊操作的方法函数,这些函数叫元方法。

local t1 ={a}
local t2= {b}
t1 + t2 -- 非法,需要设置原表

--如何设置原表
local t = {}
-- 把t设为t1的元表
setmetatable(t1,t)

打印t1的元表和t ,会发现输出结果是一样的
print(getmetatable(t1))
print(t)
-- 设置对应的原表和元方法
local t1 = {}
local t2 = {}
local t3 = {} --设置没有元表的空表
local t = {}
local tb2 = {}
t.__add = function()
     print("first meta")
     return "+"
end

tb2.__add = function()
    print("second meta")
    return "-"
end
setmatetable(t1,t)
setmatetable(t2,tb2)

t1+t2 -- 打印 first meta ,发现第一个参数带有一个__add元方法时,lua使用第一个参数作为metatable,与第二个参数无关
t3 +t2 -- 打印 second meta,如果第二个参数有__add,就把他作为metatable,如果第一第二都没有对应元方法,就报错
-- __index 
local t1 = setmetatable({name = "wbb1"},{
    __index = function(t1,key)
        print("this is __insdex")
        if key == "wbb2" then
            return "wbb2"
        else
            return
        end

    end
})
print(t1.name) --"wbb1"
print(t1.wbb2) -- "this is __insdex wbb2"
print(t1.wbb3) --  this is __insdex nil

local t2 = {name = "wbb3"}
local t3 = {__index = {name = "wbb4",age = 24}}
setmetatable(t2,t3)
print(t2.name) -- "wbb3"
print(t2.age) -- 24
-- __index可以对应一个表或者一个方法
--1.对应一个方法,如果原表没有找到索引,就去元表里执行方法
--2.对应一个表,就在元表里

--__newindex
1.__newindex对应的是方法时:
添加时,如果原表中没有key.会到元表中查询__newindex
local t4 = {} --元表
t4.__index = function(table,key) -- 查询
    print("没有这个key")
end
t4.__newindex = function(tabel,key,value) -- 更新
    print("__newindex")
end 
local t5 ={}
setmetatable(t5,t4)
t5.name = "wbb" -- 复制,会查询__newindex
print(t5.name) -- 查询,打印“没有这个key”,返回nil
2.__newindex对应的是表时
local tt = {} --元表
local tt2=  {name = "wbb"}
tt.__newindex = tt2
local tt3 = {}
setmetatable(tt3,tt)
print(tt2.name) -- "wbb"
tt3.name = "wbb2" --更新 __newindex
print(tt2.name) -- "wbb2"
print(tt3.name) -- nil
--__newindex 对应的是函数时,执行函数
--__newindex 对应的是表时,给表中新建元素,更新元素

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值