lua --- __newindex】的更多相关文章

1.如果 __newindex 是一个函数,在给 table 不存在的字段赋值的时候,会调用这个函数2.如果 __newindex 是一个table,在给 table 不存在的字段赋值的时候,会直接给 __newindex 的 table 赋值 测试用例: local Song = {name = "南山南"}; local mt = { __index = Song, __newindex = function(table, key, val) print(key .. "…
-- __newindex 对表进行更新 MyMetatable = {} MyTable = }, {__newindex = MyMetatable}) MyTable.newKey1 = print(MyTable.newKey1) --- nil print(MyMetatable.newKey1) --- 156…
转自:http://blog.csdn.net/wangbin_jxust/article/details/12108189 在谈及Lua中的__index,__newindex,rawget和rawset前,需要理解Lua中的元表这个概念. 零.元表的概念 对Lua中元表的解释: 元表可以改变表的行为模式. 这里举个例子: Window = {} Window.prototype = {x = ,y = ,width = ,height = ,} Window.mt = {} function…
上一篇介绍了__index元方法,总结来说:__index元方法是用于处理访问table中不存在的字段时的情况. 而今天,介绍的__newindex元方法,总结来说,就是:用于处理给table中不存在的字段赋值时的情况.也就是说,当给table中不存在的字段赋值时,将会调用__newindex元方法,代替赋值操作. tb = setmetatable({name = "dong"},{__newindex = function(tb, k, v) print("can,t a…
[具有默认值的table] 我们都知道,table中的任何字段的默认值都是nil,但是通过元表,我们可以很容易的修改这一规定,代码如下: function setDefault(tb, defaultValue) local mt = {__index = function () return defaultValue end} setmetatable(tb, mt) end , y = } print(tb1.x, tb1.z) --> 10 nil setDefault(tb1, ) --…
阅读了文章后用流程图来总结一下 __newindex的规则: a.如果__newindex是一个函数,则在给table不存在的字段赋值时,会调用这个函数.b.如果__newindex是一个table,则在给table不存在的字段赋值时,会直接给__newindex的table赋值. 应用: 1.__newindex是一个function时,可用来控制一个表中不存在的字段的赋值行为,例如当不希望子类覆盖父类方法或者修改父类成员时,可以对子类__newindex进行修改. 2.保护__index里面…
闭包 示例一 function newCounter() return function() -- anonymous function i = i + return i end end c1 = newCounter() print(c1()) --> 1 print(c1()) --> 2 示例二 function myPower(x) return function(y) return y^x end end power2 = myPower() power3 = myPower() )…
lua的很多语法跟matlab很像 最基本的赋值是一样的 循环和选择判断后面必须跟一个关键字:do和then ,, do ... end if - then - end table是lua的唯一一种数据结构,但是可以用它来构造数组.链表.字典等. -- Dict literals have string keys by default: t = {key1 ='value1', key2 =false} -- String keys can use js-like dot notation: p…
基类:基类定义了所有对于派生类来说普通的属性和方法,派生类从基类继承所需的属性和方法,且在派生类中增加新的属性和方法. 继承:继承是C++语言的一种重要机制,它允许在已定义的类的基础上产生新类. lua基类和C++基类极为相似,但是lua中却没有继承这一说,更没有所谓的派生类.lua只能通过一种行为(元表)来模拟C++继承这一方法. 元表:lua中提供的元表是用于帮助lua数据变量完成某些非预定义功能的个性化行为,当它做某一种操作,然而self表中却没有定义实现这种操作的方法,那么为了实现这一操…
在Lua中的每个值都有一套预定义的操作集合.例如可以将数字相加,可以连接字符串,还可以在table中插入一对key-value等.但是我们无法将两个table相加,无法对函数作比较,也无法调用一个字符串.      但是,Lua提供了元表与元方法来修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定的操作.例如,假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时,它会先检查两者之一是否有元表,然后检查该元表中是否有一个叫__add的字段.如…