我可以检测到一个值刚刚分配给Lua表的时刻吗?
我制作了一个由 Lua 解释器运行的交互式命令 shell。用户输入一些命令,shell 调用诸如 lua_dostring 之类的东西来执行它。我想允许用户在任意表中定义自己的函数,并自动将其保存到单独的存储(如文件)中。根据手册,我可以使用lua_Debug
获取用户输入的准确源代码。
看起来可以在所有执行完成后将函数源保存到某些文件中。但我想在刚刚添加/删除时自动保存。
我可以检测到某个值刚刚添加到表中的时刻吗?
I made an interactive command shell which is operating by Lua interpreter. User input some command, shell calls something like lua_dostring
to execute it. I want to allow users to define their own functions in arbitrary table, and save it to separated storage (like a file) automatically. According to the manual, I can get exact source code input by user with lua_Debug
.
It looks possible to save the functions sources to some files after all execution done. But I want to save automatically when it's just added/remove.
Can I detect the moment of some value is just added to a table?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的。如果您有一个表
tbl
,每次发生这种情况时:都会调用
tbl
元表上的元方法__newindex
。因此,您需要做的是给tbl
一个元表并设置它的__newindex
元方法来捕获输入。像这样的事情:当然,您必须找到一种方法来在感兴趣的表上设置元表。
Yes. If you have a table
tbl
, every time this happens:The metamethod
__newindex
ontbl
s metatable is called. So what you need to do is givetbl
a metatable and set it's__newindex
metamethod to catch the input. Something like this:You will have to find a way to set the metatable on the tables of interest, of course.
这是使用元表执行此操作的另一种方法:
结果如下:
请注意,我使用第二个表作为索引来保存值,而不是
rawset
,因为__newindex
仅适用于新刀片。__index
允许您从t_save
表中获取这些值。Here's another way to do this with metatables:
Here's the result:
Note that I'm using a second table as the index to hold the values, instead of
rawset
, since__newindex
only works on new inserts. The__index
allows you to get these values back out from thet_save
table.