我正在使用inspect.lua来检查表到字符串。
但是,如果该值是一个用户数据,它只返回<userdata 1>
我真的需要知道 userdata 的类型是什么,userdata 的值是什么,这对于调试非常重要,我不想在任何 IDE 中这样做,我只想让打印人员可以帮助我调试。
我正在使用inspect.lua来检查表到字符串。
但是,如果该值是一个用户数据,它只返回<userdata 1>
我真的需要知道 userdata 的类型是什么,userdata 的值是什么,这对于调试非常重要,我不想在任何 IDE 中这样做,我只想让打印人员可以帮助我调试。
你不能。
从手册:
提供 userdata 类型以允许将任意 C 数据存储在 Lua 变量中。用户数据值是指向原始内存块的指针。[...] 用户数据在 Lua 中没有预定义的操作,除了赋值和身份测试。
正如@Eric 所指出的,你可以从 Lua 做的唯一一件事就是检查元表:
print(inspect(getmetatable(someuserdata)))
如果您使用的是 C API,您应该能够注册一个自定义函数来打印块所持有的任何内容。
如果创建的 userdata 元表luaL_newmetatable
包含一个包含 userdatas 类型的条目__name
(从 Lua 版本 5.3 开始),请参阅https://www.lua.org/manual/5.3/manual.html#luaL_newmetatable。不幸的是,这个功能仍然没有被广泛使用。