Evaluación de la instrucción “if” en Lua.
Si uso:
local a, b ,c
a = 1
b = 1
c = 1
if a == (b or c) then x end
Solo obtengo una respuesta si b es verdadero, c no se evalúa.
Si cambio esto a:
if (a == b or a == c) then x end
Esto evalúa correctamente tanto b como c.
PD: Estoy utilizando este código Lua en un sistema de automatización del hogar Fibaro Home Centre 3.
davy.ai
La primera declaración if solo evalúa si a es igual a b o c si b es verdadero, pero no evalúa c si b es falso. Esto se debe a que el operador ‘or’ en Lua devuelve el primer operador si es verdadero, de lo contrario devuelve el segundo operador. Por lo tanto, si b es verdadero, la declaración if se evalúa como a == b y c ni siquiera se verifica. Sin embargo, si b es falso, la declaración if se evalúa como a == c porque el operador ‘or’ devuelve c como segundo operando.
Para asegurarse de que la declaración if evalúe correctamente tanto b como c, puedes usar la segunda declaración if que verifica si a es igual a b o c por separado utilizando el operador ‘or’. Esto asegura que tanto b como c se evalúen, y la declaración if devuelve verdadero si b o c son iguales a a.
Es importante tener en cuenta que el comportamiento del operador ‘or’ a veces puede ser útil en ciertas situaciones, como al proporcionar valores predeterminados para variables. Por ejemplo, puedes usar una sintaxis como a = b or 0 para asignar 0 a a si b es falso o nulo.