4

私は Lua でコーディングすることを学んでいて、自分のコードで問題に遭遇しました。テーブルを使用するのはこれが初めてで、別のテーブル内で特定のテーブルを呼び出すたびに、タイプが nil になり、テーブルを印刷してもテーブルが表示されません: xxxxx 通常どおり (空白を出力するだけです)、これは、テーブルを定義するときに何か間違ったことをしたことを意味すると思いますか?

コード:

local craft = { sword = { "cobble", stick = {} } }

print(type(craft.sword[1]))
print(craft.sword[1])
print(type(craft.sword[2]))
print(craft.sword[2])
print(craft)

(これは、このエラーをテストするための単純化されたバージョンのテーブルですが、ここでも発生します)

出力:

string
cobble
nil

table: 8a3b983
4

2 に答える 2

5

craft.sword1には、 and"stick"ではなく1andのキーが含まれます2。あなたがしたことは以下と同等です:

local craft = {}
craft.sword = {}
craft.sword[1] = "cobble"
craft.sword.stick = {}

craft.sword[2] には何も格納されていないことに注意してください。

より一般的には、 のようにキーではなく値を使用してテーブルを宣言すると、テーブルは{ "one", "two", "three" }1 から始まる数値インデックスに割り当てられます。 、数値インデックスには何も自動的に保存されません。ここで行ったように、それらを混在させると、キーを持たない値 ( ) は自動的に数値インデックスに割り当てられ、キーを持つ値 ( ) は指定したキーに割り当てられます。{ first = "one", second = "two", third = "three" }{ "cobble", stick = {} }"cobble"stick = {}

テーブル宣言がどのように機能するかについての完全な仕様は、テーブル コンストラクターの下のマニュアルで説明されています。

于 2013-09-30T18:18:10.563 に答える
1

テーブルsword内のテーブルcraftには、配列のような部分とハッシュのような部分の両方のインデックスが混在しています。そう

local craft = { sword = { "cobble", stick = {} } }

と同等です

local craft = { sword = { 1 = "cobble", stick = {} } }

または (stickは文字列インデックス)

local craft = { sword = { [1] = "cobble", ["stick"] = {} } }

匿名テーブルを index に配置する必要がある場合は、次の2ように使用できます。

local craft = { sword = { "cobble", { stick = {} } } } 
--                                  ^            ^

私のマシンでのテストコードの出力:

string
cobble
table
table: 003CA158
table: 003CB0C8
于 2013-09-30T23:57:14.907 に答える