lua言語には三項演算子がないらしく、代わりに以下の様な書き方をするそうです。
A and B or C
Java育ちの自分は最初「ん?andって&&と一緒だよね、なんでこれが三項演算子の代わりになるんだ?」と思いましたが、どうやらandとorって以下の仕様らしいですね。
A and B : A が false か nil ならAを返し、そうでなければBを返す。
A or B : A が false か nil 以外ならAを返し、そうでなければBを返す。
よってこうなるわけですね。
A and B or C
・Aがtrueの場合(B、Cは値)
「true and B or C」→「B or C」→「B」
・Aがfalseの場合(B、Cは値)
「false and B or C」→「false or C」→「C」
ははぁ、なるほど。納得です。しかし、コレ以上andやorを連結していくと正規表現以上にワケわからなくなりそうですね。三項演算子に使えるよ程度にしておいたほうが良さそうです(^^;
ちょっと注意事項も追記。Bがnilになる可能性のある変数や関数の場合はCまで評価されてしまうので注意ですね。
A and B or C
・Aがtrueの場合(Bがnilの場合)
「true and B or C」→「B(nil) or C」→「C」
・Aがtrueの場合(Bがvoid型/nil, falseを返す関数の場合)
「true and B() or C()」→「B() or C()」→(Bを評価で返り値がnil)→「C」
参考:
Lua5.1.3 SJIS版の更新と三項演算子など
http://hammm.blog21.fc2.com/blog-entry-74.html
2項演算子を使った3項演算子風実装
http://d.hatena.ne.jp/tattyu/20070821