Luaのand/orはただ単に真偽値を返すのではなく、なかなかに複雑な挙動を示す。
以下Lua5.0リファレンス2.5.3より引用
論理積演算子 and は、最初の引数が false か nil ならその値を返し、そうでなければ二番目の引数を返す。 論理和演算子 or は最初の引数が false か nil 以外ならその値を返し、そうでなければ二番目の引数を返す。 and と or は共にショートカット評価を行う。つまり、二番目のオペランドは、それが必要なときだけ評価される。
ということである。このand/orの「二番目の引数を返す」動作によって、いくつかの簡便な記述法が可能となる。
if arg == nil then arg = default_value endという記法に対して、
arg = arg or default_valueと書くことが可能となる。又、このイディオムを用いることで読み手は初期値の代入であると理解しやすくなる。
foo = flag and value1 or value2and演算子の方がorヨリも優先順位が高いため、flagが真であればfooにvalue1が代入され、偽であればvalue2が代入される。
ret = foo and foo:bar()等の記述によってif文を省略することが可能である。