Lua 元表(metatable)

来源:互联网 发布:php服务器搭建 编辑:程序博客网 时间:2024/04/29 04:04

Lua中每个值都有一个元表。 这个元表就是一个普通的Lua 表,它用于定义原始值在特定操作下的行为。如果你想改变一个值在特定操作下的行为,你可以在它的元表中设置对应域。例如,当你对非数字值做加操作时, Lua 会检查该值的元表中的 “__add” 域下的函数。 如果能找到,Lua 则调用这个函数来完成加这个操作。


使用 setmetatable 来替换一张表的元表。在Lua中,你不可以改变表以外其它类型的值的元表, 若想改变这些非表类型的值的元表,要使用 C API。

setmetatable (table, metatable)给指定表设置元表。 (你不能在 Lua 中改变其它类型值的元表,那些只能在 C 里做。)如果 metatable 是 nil, 将指定表的元表移除。 如果原来那张元表有 "__metatable" 键值,则会失败并抛出一个错误。

可以用 getmetatable 函数 来获取任何值的元表

getmetatable (object)如果 object 不包含元表,返回 nil 。 否则,如果在该对象的元表中有 "__metatable" 键值时返回其关联值, 没有时返回该对象的元表。
0 0
原创粉丝点击