関数はシーケンスを扱い、非正の整数のキーを無視します。非数を除く全ての値はテーブルのキーとして使うことができます。どのようなキーも型変換されることはありません。これらすべての値は妥当であり他の値とは異なるものとして扱われます。次のコードは上のテーブルとおおよそ同等なテーブルを作るものです。以外のどんな値でもテーブルの値として入れることができます。表に入れるというのは、対応するキーを削除するのと同じことです。Lua言語ではテーブルは暗黙に複製がつくられることはありません。ある関数が引数としてテーブルデータを受け取って、その関数がそのテーブルデータに対して何らかの変更を加えるとすれば、その変更はそのまま関数を呼び出し側からも見えてしまうということです。メタメソッドをオーバラーライド(上書き)することで、この結果を変えることができます。中身が空のテーブルを含めてすべてのテーブルデータは真偽値としては真値として扱われます。おける関数は第一級の値です。関数は匿名のものとして作られたり、引数として渡されたり、変数に代入されたりします。キーワードを使って作成され、括弧を使って呼び出されます。名前付き関数、ローカル関数、テーブルのメンバー関数として振る舞う関数に対しては構文糖衣が利用できます。詳しくは関数定義や関数呼出しを参照してください。関数はクロージャ(関数閉包)です。関数は自身が定義された場所のスコープへの参照を保持し、その関数が実際に評価される場所がどこであるかに関係なく、定義された場所のスコープにある変数に対してアクセスしたり操作することが出来ます。暗黙的に複製されることのないテーブルと同じように、関数オブジェクトも、たとえ異なる変数に代入されるとしても、また、他の関数に引数として渡されるとしても、もとの関数オブジェクトから何も変わることはありません。拡張するために他の言語で書かれた不明な値を保持する型として使用されます。言語のポインタや構造体を保持するのに使われる場合があります。利用可能にするため、このような拡張は一切使用されません。サンドボックス内では利用できません。メタテーブルすべてのテーブルはメタテーブルと呼ばれるテーブルと関連付けられています。メタテーブルが保持する各フィールドは、演算子や関数によって参照され、テーブル同士の差分を求めたり、そのテーブルに対するコールバック動作をする目的で使われます。rawget().テーブル自体に影響するメタテーブルのフィールドは次のものです。返す場合に使われます。