Lua 布尔值不能像数字一样进行比较?
Lua boolean can't be compared like a numbers?
我用的是Lua5.3CAPI
我用LuaCAPI与脚本建模器进行通信。
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
In Lua get_pin_bool
实际上永远不会返回。
lua_pushboolean
returns 并且 C 代码工作正常。
如果我将其更改为 lua_pushnumber
一切正常。事实上,它不会影响库的逻辑,但我不明白为什么它会破坏 Lua 虚拟机。
我在 C 中仔细检查了状态变量,它总是 0 或 1。
这里你的脚本逻辑有问题
if 1 == get_pin_bool(_G["A"..i]) then
lua不是C。布尔值不等于数字一(或任何其他数字)。
我用的是Lua5.3CAPI
我用LuaCAPI与脚本建模器进行通信。 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
In Lua get_pin_bool
实际上永远不会返回。
lua_pushboolean
returns 并且 C 代码工作正常。
如果我将其更改为 lua_pushnumber
一切正常。事实上,它不会影响库的逻辑,但我不明白为什么它会破坏 Lua 虚拟机。
我在 C 中仔细检查了状态变量,它总是 0 或 1。
这里你的脚本逻辑有问题
if 1 == get_pin_bool(_G["A"..i]) then
lua不是C。布尔值不等于数字一(或任何其他数字)。