Lua布尔值不能像数字一样进行比较吗?

我使用 Lua 5.3 C API 与脚本建模设备通信。 Lua 脚本描述设备的行为。 这是一个从 Lua 调用的 C 函数:

static int
lua_get_pin_bool ( lua_State* L )
{
    lua_Number argnum = lua_gettop ( L );
    if ( 1 > argnum )
    {
        out_error ( "Function %s expects 1 arguments got %d\n", __PRETTY_FUNCTION__, argnum );
        return 0;
    }
    int32_t pin_num = lua_tonumber ( L, -1 );
    bool state = get_pin_bool ( device_pins[pin_num]);
    if ( -1 == state )
    {
        lua_pushnil(L);
        return 1;
    }
    lua_pushboolean ( L,  state);
    return 1;
}

对应的 Lua 函数(get_pin_bool 调用 lua_get_pin_bool):

function device_simulate()
    for i = 0, 14 do
        if 1 == get_pin_bool(_G["A"..i]) then
            ADDRESS = set_bit(ADDRESS, i)
        else
            ADDRESS = clear_bit(ADDRESS, i)
        end
    end
    for i = 0, 7 do
        set_pin_bool(_G["D"..i], get_bit(string.byte(rom, ADDRESS), i))
    end
end

在 Lua 中,实际上没有返回值 get_pin_boollua_pushboolean 返回,C 代码工作正常。 如果我将其更改为 lua_pushnumber,所有内容都正常工作。实际上,它并不影响库的逻辑,但我不明白为什么它会破坏 Lua VM。 我在 C 中对状态变量进行了双重检查,它始终是 0 或 1。

点赞
用户258523
用户258523

这里您的脚本逻辑有问题

if 1 == get_pin_bool(_G["A"..i]) then

lua 不是 C。布尔值不等于数字 1(或任何其他数字)。

2015-02-12 12:46:27