10

Luat:insert(9)で動作しないのはなぜですか? (テーブルの最後に値 9 を追加したい)

t = {1,2,3}
table.insert(t, 9)  -- works (appends 9 to end of table t)
t:insert(9)         -- does NOT work

普通に思った

a.f(a,x)a:f(x)Lua で

4

3 に答える 3

16

a:f(x)その2番目の構文の単なる構文糖衣であることは事実a.f(a,x)ですが、そこにあるものではありません。逆に考えてみてください:

あなたが試した関数呼び出しはt:insert(9)

したがって、あなたが述べた構文規則はt.insert(t, 9)

しかし、作業関数呼び出しはtable.insert(t, 9)

最後の 2 つが同じではないことがわかりますか? したがって、あなたの質問に対する答えは、insert() は に含まれる関数ではなく、t「テーブル」にあるということです。

于 2011-05-25T15:31:19.640 に答える
11

tableメソッドは に関連付けられていないためt、構文を介して直接呼び出すか、メタテーブルをにtable.insert定義する必要があります。次に例を示します。ttable

> t = {1,2,3}
> setmetatable(t, {__index=table})
> t:insert(9)
> print (t[4])
9
于 2011-05-25T16:00:32.047 に答える
3

insert というテーブルのエントリを呼び出そうとしていますが、テーブル t には何もありません。機能させたい場合は、挿入エントリを table.insert に設定することができます

t = {insert = table.insert, 1, 2, 3}
t:insert(9)
print(t[4]) -- 9, as you'd expect
于 2014-03-03T16:21:00.697 に答える