表面的には、変数の代入とテーブル コンストラクターが同様のことを行うように見えます。変数の割り当てが「ステートメント」と見なされるのに、なぜテーブル コンストラクターは「式」と見なされるのでしょうか。
2 に答える
テーブルコンストラクターはテーブル1に評価されます
テーブルコンストラクター内の「割り当て」(=
シンボル)は、テーブル内のフィールドを初期化するために使用される構文にすぎません。変数の割り当てではありません。構文はと似ていますが、それは表面的な類似性にすぎません。2つの異なる構文構造=
を混同しないでください。
LuaがJavaScriptと同じ構文を使用した場合、次のようになります。
t = {x: 2} -- invalid syntax, for argument
x: 2
そして、それは変数の割り当てではなく、フィールドの初期化子であることは「明確」です。もちろん、Lua構文はそれがとして書かれることを指示しますt = {x = 2}
が、区別の考えは成り立ちます。2つの異なる構成があり、{x = 2}
テーブルコンストラクタは副作用や変数の割り当てを引き起こしません。
1後で使用するためにテーブルを割り当てることができなければ、あまり意味がありません。代入の右側に表示できるのは式のみであるため、結果のテーブル(値)を変数に割り当てる(または関数などに渡す)ことができるように、テーブルコンストラクターは式である必要があります。
また、Luaは、 Cのような言語よりも、(代入)ステートメントと式の分離が強いことに注意してください。
テーブルコンストラクターが式でない場合は、それらを何にも割り当てることができません。このステートメントvariable_name = {}
は、式(この場合はテーブルコンストラクター)の結果を変数に割り当てます。
テーブルは、数値、文字列、関数、ユーザーデータ、および値であるLuaの他のすべてと同じように値です。式は値に評価されます。したがって、テーブルの構築は、値に評価される式です。