如何在lua中检查userdata

我正在使用 [inspect.lua] (https://github.com/kikito/inspect.lua) 将表格转换为字符串进行检查。

但是,如果值是 userdata,则仅返回 <userdata 1>

我真的需要知道 userdata 类型是什么,userdata 值是什么,这对于调试非常重要,我不想在任何 IDE 中做这件事,我只想要一个可以通过打印信息帮助我调试的东西。

点赞
用户565840
用户565840

你不能。

手册中可以得知:

userdata 类型的提供是为了允许在Lua变量中存储任意的C数据。一个 userdata 值是一个指向一段原始内存块的指针。[...] 在Lua中,userdata 没有预定义的操作,除了赋值和身份测试。

正如@Eric所指出的,你唯一能从Lua中做的是检测元表:

print(inspect(getmetatable(someuserdata)))

如果你正在使用C API,你应该能够注册一个自定义函数,打印出块中包含的任何内容。

2013-03-18 07:30:16
用户330901
用户330901

如果使用luaL_newmetatable创建了userdata元表,则其中包含一个条目__name,其中包含userdatas类型(自Lua版本5.3以来),请参见https://www.lua.org/manual/5.3/manual.html#luaL_newmetatable。不幸的是,这个特性仍然没有被广泛使用。

2018-08-28 22:52:07