【问题标题】:Lua - Detecting integersLua - 检测整数
【发布时间】:2016-07-03 21:41:37
【问题描述】:

Lua 的行为如下:

print( 1 ) -- prints 1
print( 1.0 ) -- prints 1.0

由于 Lua 使用 lua_Number,它是一个浮点值(float 或 double),对于所有数字类型(即整数和实数),我猜它以某种方式跟踪数字值的实际性质,否则print( 1 ) 将打印1.0,因为在Lua 代码中的某个点将1 转换为lua_Number 时,1 是整数的信息会丢失。

有没有办法使用 Lua 5.3.2 的 C API 来检测 lua_Number 最初是整数还是实数?

假设我想编写一个期望整数或实数的本机函数。弹出参数时,我怎么知道给定的值是1 还是1.0

谢谢。

PS:我已经看到了这个答案:Test if Lua number is integer or float,但这并不能解决我的问题,因为检查number == (int) number 是否会表明任何像N.0 这样的实数都是整数。

【问题讨论】:

    标签: c lua


    【解决方案1】:

    Lua 5.3 使用lua_Number(默认:double)表示浮点数,lua_Integer(默认:long long)表示整数。以前的版本只有浮点类型。 API 具有函数lua_isinteger 来确定一个值是否表示为整数。

    【讨论】:

    • 感谢您的帮助。
    • 我在 lua.h 中也看到没有整数类型,即没有LUA_INTEGER,而只有LUA_TNUMBER。那么整数类型是一个真正的 Lua 类型,可以用来举例:type( 1 ) == "integer" 还是某种隐藏的子类型?谢谢。
    • @Virus721 目前(从 Lua 5.4 开始)type(1) 返回 number,所以你必须使用 C API 来检查 lua_isinteger
    • 我认为您可以使用 C API 在 Lua 中实现 isinteger() 函数? (我想知道为什么 isinteger() 不是核心语言函数)
    猜你喜欢
    • 2014-10-01
    • 2012-09-19
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2011-05-27
    • 2021-12-13
    相关资源
    最近更新 更多