lua_pushlightuserdata metatables在c中不同模块的行为

时间:2013-09-18 10:58:35

标签: c api lua

我一直在修改Lua C API,我偶然发现了一些我自己无法理解的东西。

嗯,我知道你不能拥有多个带有不同metatable的lighuserdata,但是即使指针属于同一类型,是否可以在不同的C模块中使用lightuserdata和单独的mettables?

例如

模块A:lightuserdata指向整数类型+ Metatable A 模块B:lightuserdata指向整数类型+ Metatable B

的指针

我希望模块B不会覆盖模块A中lightuserdata上的元表。

任何人都知道这是否会发生?

1 个答案:

答案 0 :(得分:0)

Lightuserdata不能有单独的元表:所有lightuserdata值都具有相同的元表,最初为零。如果为lightuserdata值提供metatable,它将被设置为所有lightuserdata值。

拥有单独的元表是普通的完整用户数据的目的。只需使用完整的用户数据,不要三思而行。