真相表

Lua 中的逻辑运算符不会返回布尔值,而是它们的一个参数。使用 nil 表示 false,将数字表示为 true,这是它们的行为方式。

print(nil and nil)       -- nil
print(nil and 2)         -- nil
print(1 and nil)         -- nil
print(1 and 2)           -- 2

print(nil or nil)        -- nil
print(nil or 2)          -- 2
print(1 or nil)          -- 1
print(1 or 2)            -- 1

如你所见,Lua 将始终返回使检查失败成功的第一个值。这是真相表,显示了这一点。

  x  |  y  || and            x  |  y  || or
------------------         ------------------
false|false||  x           false|false||  y   
false|true ||  x           false|true ||  y   
true |false||  y           true |false||  x   
true |true ||  y           true |true ||  x

对于那些需要它的人来说,这里有两个代表这些逻辑运算符的函数。

function exampleAnd(value1, value2)
  if value1 then
    return value2
  end
  return value1
end

function exampleOr(value1, value2)
  if value1 then
    return value1
  end
  return value2
end