最好科技广州网站建设,wordpress图片幻灯片,怎么做国际网站,wordpress 页面设置不了标签页元表概念 #xff08; Metatable#xff09;元表由键名为 事件 (event) 和其中的值叫作元方法 (metamethod)组成。在lua中每个值都有一个元表。而table和userdata所定义的值允许自定义对应的元表#xff0c;其他都是用统一的元表。我的理解#xff0c;元表#xff0c;其实…元表概念 Metatable元表由键名为 事件 (event) 和其中的值叫作元方法 (metamethod)组成。在lua中每个值都有一个元表。而table和userdata所定义的值允许自定义对应的元表其他都是用统一的元表。我的理解元表其实有点类似
值的属性的味道。对元表的操作getmetable 查询元方法setmetable 替换元方法。metatable 包含几个固定的元方法.其事件名由下划线 __ 前缀的字符串组成。有add: 操作。 sub: - 操作。 其行为类似于 add 操作。mul: * 操作。 其行为类似于 add 操作。div: / 操作。 其行为类似于 add 操作。mod: % 操作。 其行为类似于 add 操作它的原生操作是这样的 o1 - floor(o1/o2)*o2pow: ^ 幂操作。 其行为类似于 add 操作它的原生操作是调用 pow 函数通过 C math 库。unm: 一元 - 操作。concat: .. 连接操作len: # 操作。eq: 操作。a ~ b 等价于 not (a b) 。lt: 操作。le: 操作。a b 等价于 b a 。注意如果元方法 le 没有提供Lua 就尝试 lt 它假定 a b 等价于 not (b a) index: 取下标操作用于访问 table[key] 。newindex: 赋值给指定下标 table[key] value 。call: 当 Lua 调用一个值时调用。以上事件中index 和newindex 很关键常常被自定义的函数所取代。如定义一个函数取代环境中的处理local f function (t,i)error(cannot redefine global variable ..i..,2)endlocal g {}local G getfenv()setmetatable(g,{__indexG,__newindexf})--设置g的运行环境setfenv(1,g)rawset(g,x,3)x2y1 -- cannot redefine y以上的替换只能在C下改变在lua中不能中改变其它任何类型的值的 metatabledebug 库例外值得说明的是table 和userdata类型拥有独立的 metatable 也可以共享一个相同的表作它们的 metatable在lua的扩展库函数中有一个luaL_newmetatable这个函数是创建一个表作为元表提供给userdata使用。(userdata可以理解为自定义的一个数据结构。)ta{1,3,5} tb{2,4,6}
tm {};
tm.__add function(a,b) for _, item in ipairs(b) do table.insert(a,item); end return a; end
setmetatable(ta,tm) sum (ta tb);
for v,j in ipairs(sum) do print (v,j); end a rawget(ta, 5) print (a)