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 で
a:f(x)
その2番目の構文の単なる構文糖衣であることは事実a.f(a,x)
ですが、そこにあるものではありません。逆に考えてみてください:
あなたが試した関数呼び出しはt:insert(9)
したがって、あなたが述べた構文規則はt.insert(t, 9)
しかし、作業関数呼び出しはtable.insert(t, 9)
最後の 2 つが同じではないことがわかりますか? したがって、あなたの質問に対する答えは、insert() は に含まれる関数ではなく、t
「テーブル」にあるということです。
table
メソッドは に関連付けられていないためt
、構文を介して直接呼び出すか、メタテーブルをにtable.insert
定義する必要があります。次に例を示します。t
table
> t = {1,2,3}
> setmetatable(t, {__index=table})
> t:insert(9)
> print (t[4])
9
insert というテーブルのエントリを呼び出そうとしていますが、テーブル t には何もありません。機能させたい場合は、挿入エントリを table.insert に設定することができます
t = {insert = table.insert, 1, 2, 3}
t:insert(9)
print(t[4]) -- 9, as you'd expect