官术网_书友最值得收藏!

Logical operators

Logical operators test the relationship of two statements. Logical operators work a little differently in Lua than in other languages. In Lua, anything not false is considered to be true. Only two values represent false for a logical operator, the constant value of false and nil; anything else is true.

Logical operators in Lua do not evaluate to a Boolean result; rather they evaluate to one of the provided operands.

The and operator returns its first operand if that operand is false and the second operand if the first operand was true. Here is an example:

x = true and false -- value is false
y = false and false -- value is false
z = true and true -- value is true
w = 7 and 1 -- value is 1

The or operator (or) returns its second operand if it is not false, otherwise it will return the first operand. Here is an example:

x = true or false -- value is true
y = false or false -- value is false
z = true or true -- value is true
w = 7 or 1 -- value is 7

The and/or operators both use shortcut evaluation. This means that the second operand is only evaluated if needed. This is important when the operands are functions. Here is an example:

function TrueFunction()
print ("returning true")
return true
end

function FalseFunction()
print ("returning false")
return false
end

x = FalseFunction() and TrueFunction()

This statement only evaluates the false function. Only returning false is printed. But if we changed the line that assigns x to be the following:

x = TrueFunction() and FalseFunction()

After changing the line, both functions will evaluate, and both returning true and returning false will be printed. Shortcut evaluation can make bugs difficult to spot; for this reason, try to avoid functions as operands when using logical operators.

The logical not operator is a unary operator. It reverses the logical state of its operand. Provided with a value that is false, this operator will evaluate to true. Provided with a value that is true, the operator evaluates to false. Here is an example:

x = not true -- false
y = not true or false -- false
z = not not false -- false
w = not (7 + 1) -- false
主站蜘蛛池模板: 鄂伦春自治旗| 五大连池市| 重庆市| 顺义区| 兴安盟| 区。| 当阳市| 万安县| 石家庄市| 葵青区| 镇巴县| 洪雅县| 仙桃市| 邵东县| 嘉义市| 湖北省| 噶尔县| 内乡县| 无为县| 塔城市| 新泰市| 扶风县| 莱芜市| 额敏县| 突泉县| 东宁县| 游戏| 苏州市| 德化县| 公安县| 嘉义市| 石嘴山市| 昌图县| 柳河县| 寿光市| 高安市| 太仆寺旗| 东山县| 友谊县| 江陵县| 定州市|