Lua中如何正确运用--- __newindex实现自定义索引操作?

2026-04-01 20:031阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计247个文字,预计阅读时间需要1分钟。

Lua中如何正确运用--- __newindex实现自定义索引操作?

1. 当 `__newindex` 是一个函数时,在给 `table` 不存在的字段赋值时,会调用这个函数。

2.如果 `__newindex` 是一个 `table`,在给 `table` 不存在的字段赋值时,会直接给 `__newindex` 的 `table` 赋值。

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);

编译结果:

本文共计247个文字,预计阅读时间需要1分钟。

Lua中如何正确运用--- __newindex实现自定义索引操作?

1. 当 `__newindex` 是一个函数时,在给 `table` 不存在的字段赋值时,会调用这个函数。

2.如果 `__newindex` 是一个 `table`,在给 `table` 不存在的字段赋值时,会直接给 `__newindex` 的 `table` 赋值。

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);

编译结果: