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
:
GameLib
没有元表
getmetatable
不是 Lua 的 getmetatable
。它已被 returns 至少某些值为 nil 的函数覆盖。琐碎 function getmetatable() end
我刚刚开始研究 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
:
GameLib
没有元表getmetatable
不是 Lua 的getmetatable
。它已被 returns 至少某些值为 nil 的函数覆盖。琐碎function getmetatable() end