lua元方法__index,对table进行初始化,设置默认值
2015-11-10 17:23
561 查看
当访问一个table不存在的索引时,lua解释器回去查找table中是否有__index 这个元方法,如果存在返回__index 最终的调用结果,如果不存在那么就返回一个空值nil。当创建一个新的table时,默认没有元表,对不存在的索引访问直接返回nil,可以通过设置元表,元方法使其调用__index
返回nil的情况:
设置元方法__index
local t = {}
local mt = {}
local prototype = {1,2,3}
setmetatable(t,mt)
mt.__index = function(t,k)
return prototype[2]
end
print(t[2]) --> 输出2
通过这一属性,我们可以对一个table 设置默认值,也就是说,对于一个table,创建的时候,对没有赋值过的,或者不存在的索引,给一个默认值0,就像C中对新定义的数组初始化成0一样
function setDefault(t)
local res = {__index = function(t,k)
return 0
end}
setmetatable(t,res)
end
local t = {} ;
setDefault(t)
print(t[2]) ---〉输出0
返回nil的情况:
local t = {} print(t[2]) :--返回nil
设置元方法__index
local t = {}
local mt = {}
local prototype = {1,2,3}
setmetatable(t,mt)
mt.__index = function(t,k)
return prototype[2]
end
print(t[2]) --> 输出2
通过这一属性,我们可以对一个table 设置默认值,也就是说,对于一个table,创建的时候,对没有赋值过的,或者不存在的索引,给一个默认值0,就像C中对新定义的数组初始化成0一样
function setDefault(t)
local res = {__index = function(t,k)
return 0
end}
setmetatable(t,res)
end
local t = {} ;
setDefault(t)
print(t[2]) ---〉输出0
相关文章推荐
- lua开发--字符串,json,编码转换
- Lua UnPack函数用法
- Faster-rnnlm代码分析3 - EvaluateLM(前向计算ForwardPropagate)
- lua语言
- SLua 绑定 Protobuf-Lua (protoc-gen-lua) 在SLua中使用 Protobuf
- 【绑定自定义类至Lua】(四)使用绑定C++至Lua的自定义类
- 【绑定自定义类至Lua】(三)动手绑定自定义类至Lua
- 【绑定自定义类至Lua】(二)新建项目中配制环境
- 【绑定自定义类至Lua】(一)环境搭建
- Lua(一)——类型与值
- 生产环境中 Ngx_lua 使用技巧和应用的范例
- lua table访问的元方法
- lua 算术类和关系类的元方法
- lua 模式匹配
- 1.lua
- LUA语言注意点归集
- [Lua]Lua语言基础汇总 -- 函数
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
- Lua_Lua中的闭包小结
- Lua_Lua中的数学库总结