AND 在 Lua 中,它是如何处理的?

AND in Lua, how is it processed?

我在 Lua Style Guide

中看到了这段代码
print(x == "yes" and "YES!" or x)

上下文:

local function test(x)
  print(x == "yes" and "YES!" or x)
  -- rather than if x == "yes" then print("YES!") else print(x) end
end

" x == "yes" 和 "YES!" 到底发生了什么? 为什么打印 "YES!" or (x) 而不是 "true" or (x) ?

编辑:

是不是像:

X == "yes"               -- > true
true and (value)         -- > value
print( (x == "yes") and value)

所以检查 x 的值 "yes" 结果为 true,将 true 添加到一个值给出该值并打印此过程打印该值,对吗?

来自docs

The operator and returns its first argument if it is false; otherwise, it returns its second argument.

因此,true and "YES!" 的计算结果为 "YES!"

这个方案之所以可行,是因为如果第一个参数是假的,整个表达式都会变成假的(与第一个参数相同);否则它将与第二个参数相同,当且仅当为真将使整个表达式为真。