Lua - C++ 对象元表 returns 无

Lua - C++ object metatable returns nil

我刚刚开始研究 Lua,我了解到可以通过元表访问 C++ 对象属性。

我试图在游戏脚本中访问此类对象的函数:“GameLib”。它在 Lua 中作为全局变量可用,但是 getmetatable() returns nil:

-- example usage elsewhere in the scripts:
local pPlayer = GameLib.GetLocalPlayer();

-- my tried code:
local mt = getmetatable(GameLib);
print("Metatable type:" .. type(mt)); -- "Metatable type: nil"

可能是什么问题?是否存在 C++ 对象没有元表的情况?如果是这样,是否有其他方法可以访问其属性?

来自Lua 5.4 参考手册:

2.4 Metatables and Metamethods:

Every value in Lua can have a metatable.

By default, a value has no metatable, but the string library sets a metatable for the string type

所以有些情况下值,甚至用户数据都没有元表。事实上这是默认的。

6.1 Basic Functions: getmetatable

If object does not have a metatable, returns nil. Otherwise, if the object's metatable has a __metatable field, returns the associated value. Otherwise, returns the metatable of the given object.

所以这给我们留下了两个选择 为什么 getmetatable(GameLib) returns nil:

  1. GameLib 没有元表
  2. getmetatable 不是 Lua 的 getmetatable。它已被 returns 至少某些值为 nil 的函数覆盖。琐碎 function getmetatable() end