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

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
主站蜘蛛池模板: 沙河市| 健康| 兰州市| 新兴县| 清原| 宝清县| 双流县| 钦州市| 乐至县| 吉隆县| 织金县| 遵义县| 东兰县| 永善县| 习水县| 鹤峰县| 汪清县| 汽车| 湟中县| 勐海县| 于都县| 鹤岗市| 云浮市| 昔阳县| 富宁县| 永嘉县| 乐都县| 乐都县| 宁安市| 庆阳市| 伊川县| 迁西县| 灵川县| 介休市| 连云港市| 共和县| 新乐市| 荆门市| 营口市| 恩施市| 志丹县|