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);
编译结果: