真相表

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