式は変数とリテラル値から値を計算します。

  • 算術演算
  • リレーショナルオペレーション
  • ロジカルオペレーション
  • 連結
  • 長さ
  • 優先順位

算術演算

算術演算は数値に対して実行されます。文字列値を算術演算に使用すると、数値に変換されます。変換に失敗すると、エラーが返されます。

   
a + b a と b を追加
a-b a から b を引く
a * b a と b を掛ける
a/b a を b で割る
a% b modulo = a - math.floor(a/b)*b
a ^ b a を b 乗する。b には任意の数を指定できる
-a 否定する

リレーショナルオペレーション

関係演算は 2 つの値を比較し、関係が満たされている場合は true を返し、そうでない場合は false を返します。リレーショナル操作は、どのタイプの値でも実行できます。値が同じタイプでない場合は、false が返されます。数値は通常の方法で比較されます。文字列は、現在のロケールの照合順序を使用して比較されます。

   
a == b a は b と等しい
a ~= b a は b と等しくない
a < b a は b より小さい
a > b a は b より大きい
a <= b a が b と等しいか、それより小さい
a >= b a が b より大きいか、または等しい

ロジカルオペレーション

論理演算は従来、ブール値に対して実行されていましたが、この言語では任意の2つの値に対して実行できます。nilとfalseはfalseと見なされ、その他の値はtrueと見なされます。論理演算ではショートカット評価を使用します。最初の値が操作の結果を決定する場合、2 番目の値は評価されません。

   
a と b a が false または nil の場合は a を返し、それ以外の場合は b を返します。
a or b a が false ではなく nil でもない場合は a を返し、それ以外の場合は b を返します。
not a a が false でないか nil の場合は false を返し、それ以外の場合は true を返します

andおよびor演算は、式内の条件付き評価に使用できます。

   
a or b a が初期化されていない (nil) 場合は、これを使用してデフォルト値 b を指定できます。これは関数のオプションパラメータに役立ちます。
a と b または c 条件 a に基づいて、nil 以外の b または c を選択できます。a が true の場合、a と b は b を返し、b または c は b を返します。a が false の場合、a と b は false を返し、false または c は c を返します。これは? と同等です。b: C プログラミング言語の c。

連結

文字列の連結は s1.. s2 です。これにより、s1 と s2 の内容を保持するのに十分な大きさの新しい文字列が作成され、その内容が新しい文字列にコピーされます。s1 または s2 が文字列でない場合、エラーが発生します。連結を繰り返すと、かなりのコピーオーバーヘッドが発生する可能性があることに注意してください。一度に 1 バイトずつ連結して n バイトの文字列を作成すると、n* (n+1) /2 バイトがコピーされます。パフォーマンスを向上させるには、文字列の一部を連結してテーブル (後述) に入れ、table.concat () 関数を使用できます。この例が COMBINE_HEADERS () の例に示されています。

長さ

文字列 s の長さは #s によって返されます。#演算子は、後で説明するように、配列テーブルでも使用されます。

優先順位

演算子の優先順位によって、式で実行される演算の順序が決まります。優先順位の高い操作は、優先順位の低い操作より先に実行されます。優先順位は通常どおり、括弧で上書きできます。たとえば、in a + b \* c, * は+よりも優先順位が高いため、 a + (b \* c)式は次のように評価されます。

   
最高
- not # - (unary)
-
  • / %
- ..
- = ~= < > <= >=
- 変更前
最低 または

同じ優先順位の演算は左から右 (左連想) に実行されますが、^ と.. は右から左 (右連想) に実行されます。したがって、^ b ^ cはa^(b ^ c)として評価されます。