lua --- __newindex 的使用规则

Posted luguoshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua --- __newindex 的使用规则相关的知识,希望对你有一定的参考价值。

1、如果 __newindex 是一个函数,在给 table 不存在的字段赋值的时候,会调用这个函数
2.如果 __newindex 是一个table,在给 table 不存在的字段赋值的时候,会直接给 __newindex 的 table 赋值

测试用例:

 1 local Song = {name = "南山南"};
 2 
 3 local mt = 
 4 {
 5     __index = Song,
 6     __newindex = function(table, key, val)
 7         print(key .. "是一个不存在的字段,不能对其赋值!");
 8     end
 9 };
10 
11 local animal = {}
12 setmetatable(animal, mt);
13 print(animal.name);
14 animal.name = "cat";  
15 
16 local tmp = {};
17 
18 local mt1 = 
19 {
20     __index = Song;
21     __newindex = tmp;
22 };
23 local animal1 = {};
24 setmetatable(animal1, mt1);
25 print(tmp.cat);
26 animal1.cat = "Cat";
27 print(tmp.cat);

编译结果:

技术图片

以上是关于lua --- __newindex 的使用规则的主要内容,如果未能解决你的问题,请参考以下文章

lua中__index和__newindex的使用

Lua语言中的__index,__newindex,rawget和rawset

lua只读表的实现

Lua学习

Lua教程

在lua中只读可迭代表?