Luaで完全に実行可能な3つの演算子

1416 ワード

前言
CまたはC++では、よく3つの演算子(または3元演算子と呼ばれる)を使用します.つまり、a ? b : c;のような形をした論理です.この文の簡単な解釈は、aが真であれば、式の値はbで、否定者式の値はcです.このような論理はluaを書くときもよくあるので、a and b or cという書き方を発明した人がいます.次に、この式に何か問題があるかを分析し、解決策を示します.
luaの古典書「Luaプログラミング」を引用すると、Luaの論理オペレータにはand、or、notがあることがわかります.条件制御文と同様に、すべての論理オペレータはfalseとnilを偽と見なし、他のものを真と見なし、オペレータandにとって、その最初の操作数が偽であれば、最初の操作数を返します.そうでない場合は、2番目のオペランドを返します.オペレータorの場合、最初のオペランドが真であれば、最初のオペランドが返されます.そうでない場合は、2番目のオペランドを返します.
andとorはいずれも「短絡評価」を用いており、必要に応じて2番目の操作数を評価するだけだという一節もある.短絡評価は、(type(v)=="table" and v.tag == "best")のような式が実行エラーを起こさないことを保証し、ここでの「短絡評価」は、vがtableではない場合に、v.tag == "best"の値を判断せずにfalseに戻ることを保証することができる.
また「a and b or c」にも言及されています「C言語の表現a ? b : cのような書き方ですが、その問題は指摘されていません.では、最も一般的な方法は、通常のif-else文を使用することです.
ぶんせき
ここまで言うと、なぜb式の値が本当でなければならないのか、迷っている人もいるかもしれません.このとき、a and b or cの場合、a ? b : cの式が真であれ偽であれ、全体的にb == falseの値を返す例を書いてみてください.では、aの値がずっと本物であることを保証するにはどうすればいいのでしょうか.実際のプログラムロジックではcbまたはbであることが許されるでしょう.
これは以下のテクニックを用いていますが、これも私が何気なく他の人から学んだことで、ここまで書いても記録するためです.それはb表現の外にtableを1枚包装して{b}と書く形式で、戻り値の時に{b}[1]と書く形式でいいので、全体の表現はfalseになります.これで2番目の式が本物になる前提を満たし、今後luaで3つの演算子を楽しく書くことができます!
結論
  • 完全三項演算子nil