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

理解Lua中的__index和__newindex

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

junjie 通过本文主要向大家介绍了lua newindex,lua index,lua table.indexof,lua中 index,lua registryindex等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

--example: 
local temp_table ={ 
    10, 
    1, 
    Index1 = "hello", 
    Index2 = "world", 
    Index3 = "lua", 
    Index4 = "language", 
    lang = "lua language", 
} 
 
temp_table.__add = function(a, b) return 3 end 
 
 
for _, Value in pairs(temp_table) do 
    print(Value) 
end 
 
local temp_metable_table = { 
    Index1 = "temp_new_metable_Index1", 
    Index2 = "temp_new_metable_Index2", 
    Key = "temp_new_metable_Key_end", 
} 
 
 
for _, Metable_Value in pairs(temp_metable_table) do 
    print(Metable_Value) 
end 
--只能访问temp_table的方法 
--setmetatable(temp_metable_table,  temp_table) --如果setmetable 为这种方式的话,那么我不能够对metable进行原子操作 
--print(temp_metable_table + temp_table) 
 
--如果是这种方式的话,我们只能访问它的原子,也就是它的数据成员 
--[[setmetatable(temp_metable_table, {__index = temp_table} )  
 
print(temp_metable_table[1]) 
print(temp_metable_table["lang"])--]] 
 
--如果是__newindex的话,我们可以访问原table,找到相关的key,除此之外,你还可以自己给原table添加数据成员 
setmetatable(temp_metable_table, {__newindex = temp_table} )  
temp_metable_table[5] = 100 
print(temp_metable_table[5]) 
print(temp_table[5]) 
</div>

Window = {} 
 
Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,} 
Window.mt = {} 
function Window.new(o) 
    setmetatable(o ,Window.mt) 
    print(getmetatable(o)) 
    print(getmetatable(Window.mt)) 
    return o 
end 
 
Window.mt.__index = function (t ,key) //由于__index 给赋予了funcion,一个匿名函数 
    -- body 
    return 1000 
end 
 
w = Window.new({x = 10 ,y = 20}) 
print(w.a) //在这里虽然没有a这个成员,但是会默认a为__index所绑定的function返回值作为a的值 
</div>

Window = {} 
Window.mt = {} 
 
function Window.new(o) 
    setmetatable(o ,Window.mt) 
    return o 
end 
Window.mt.__index = function (t ,key) 
    return 1000 
end 
Window.mt.__newindex = function (table ,key ,value) 
    if key == "wangbin" then 
        rawset(table ,"wangbin" ,"yes,i am") 
    end 
end 
w = Window.new{x = 10 ,y = 20} 
w.wangbin = "55" 
print(w.wangbin) 
</div>
总结:
如果在元table中去找相应的操作,例如__index,__newindex等,如果有则直接访问,如果没有就新添加进元table中

</div>

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

  • 理解Lua中的__index和__newindex
  • Lua中的__index方法详解

相关文章

  • Lua下基本的网络编程示例
  • Lua的table库函数insert、remove、concat、sort详细介绍
  • 深入探究Lua中的解析表达式
  • Lua面向对象编程之类的简单实现方式
  • Lua和C语言的交互详解
  • Lua教程(十九):C调用Lua
  • Lua table中安全移除元素的方法
  • Lua中table的几种构造方式详解
  • Lua脚本获取喜马拉雅MP3音频地址
  • Lua源码中字符串类型的实现

文章分类

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

最近更新的内容

    • Lua教程(十三):弱引用table
    • Lua中基本的数据类型、表达式与流程控制语句讲解
    • Lua中的异常处理pcall、xpcall、debug使用实例
    • 详解Lua中的数组概念知识
    • Lua中的loadfile、dofile、loadstring、require用法实例
    • Lua学习笔记之数据类型
    • Lua的堆栈浅析
    • Lua学习笔记之数据结构
    • Lua与C语言间的交互实例
    • Ruby元编程技术详解(Ruby Metaprogramming techniques)

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

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