这是一个可以检查参数是否为表的潜在模式:
int my_fn(lua_State *L) {
luaL_checktype(L, 1, LUA_TTABLE);
// .. do stuff with the table ..
}
每当第一个参数是表格时,这都有效。但是,其他 Lua 类型支持表查找,例如 userdata,在 luajit 中支持 cdata。
lua_getfield
有没有一种很好的方法可以在我调用它之前检查表查找(例如 via )是否会成功?我的意思是不将类型限制为表格。相关地,表、userdata 和 cdata 是 luajit 中唯一支持索引查找的类型吗?
我对仅限于 Lua 5.1 C API 的答案最感兴趣,因为我正在使用目前适用于此版本的 LuaJIT。
澄清
这些函数的优点luaL_checkXXX
是,在一行中,它们:
- 如果类型错误,则抛出信息丰富、用户友好的错误消息,并且
- 提供可立即使用的 C 友好返回值。
我正在为桌子寻找类似的东西。我不期望 C 友好的哈希表返回值,但如果有问题的参数不可索引,我确实希望向用户提供相同质量的错误消息。
我接受鸭子打字的哲学。如果我编写的函数只是想从参数中索引一些键,那么我不在乎该参数是否真的是一个表,或者只是一个支持__index
查找的用户数据。我想接受任何一个。