16

我正在使用inspect.lua来检查表到字符串。

但是,如果该值是一个用户数据,它只返回<userdata 1>

我真的需要知道 userdata 的类型是什么,userdata 的值是什么,这对于调试非常重要,我不想在任何 IDE 中这样做,我只想让打印人员可以帮助我调试。

4

2 回答 2

15

你不能。

手册

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

正如@Eric 所指出的,你可以从 Lua 做的唯一一件事就是检查元表:

print(inspect(getmetatable(someuserdata)))

如果您使用的是 C API,您应该能够注册一个自定义函数来打印块所持有的任何内容。

于 2013-03-18T07:30:16.337 回答
0

如果创建的 userdata 元表luaL_newmetatable包含一个包含 userdatas 类型的条目__name(从 Lua 版本 5.3 开始),请参阅https://www.lua.org/manual/5.3/manual.html#luaL_newmetatable。不幸的是,这个功能仍然没有被广泛使用。

于 2018-08-28T22:52:07.833 回答