LuaL_checknumber 和 lua_tonumber 之间有什么区别?

澄清(抱歉问题不够明确):它们都尝试将堆栈上的项转换为“lua_Number”。lua_tonumber还将转换表示数字的字符串。luaL_checknumber如何处理不是数字的内容?

还有luaL_checklongluaL_checkinteger。它们分别与(int)luaL_checknumber(long)luaL_checknumber相同吗?

点赞
用户152580
用户152580

他们都尝试将堆栈上的项目转换为lua_Number。lua_tonumber还将转换表示数字的字符串。当luaL_checknumber失败时,它会抛出(Lua)错误-它跳转并从C函数的POV永远不会返回。lua_tonumber仅返回0(这也可以是有效的返回值)。因此,您可以编写此代码,这应该比首先使用lua_isnumber检查更快。

double r = lua_tonumber(_L,idx);
如果(r == 0 &&!lua_isnumber(_L,idx))
{
    // 错误处理代码
}
返回r;
2012-08-23 03:59:15