【发布时间】:2014-10-01 11:50:22
【问题描述】:
在我的 C++ 程序中,我需要知道 Lua 变量是整数还是浮点数。 C API 提供了lua_isnumber(),但是这个函数不区分int/float/double。
到目前为止,我已经使用modf() 解决了这个问题:
if (lua_isnumber(luaCtx, -1)) // int / unsigned int / float:
{
luaVarName = lua_tostring(luaCtx, -2);
double n = static_cast<double>(lua_tonumber(luaCtx, -1));
// Figure out if int or float:
double fractPart, intPart;
fractPart = modf(n, &intPart);
if (fractPart != 0.0)
{
luaVarType = ScriptVar::TypeTag::Float;
luaVarData.asFloat = static_cast<float>(n);
}
else
{
luaVarType = ScriptVar::TypeTag::Integer;
luaVarData.asInteger = static_cast<int>(n);
}
}
Lua API 是否提供了一种更精确地推断变量类型的方法?
【问题讨论】:
-
不。您可以使用
lua_tounsigned或lua_checkunsigned将其转换为无符号类型。否则你必须像你一样投射它。 -
Lua 5.3 将同时具有整数和浮点类型。