うん。luaで私が遭遇した最高のものの1つは、参照プロパティとしての何かです。
key
テーブルでのsの使用方法に問題はありません。
Luaのテーブルは値でも変数でもありません。それらはオブジェクトです。テーブルは動的に割り当てられたオブジェクトと考えることができます。プログラムは、それらへの参照(またはポインター)のみを操作します。舞台裏で隠されたコピーや新しいテーブルの作成はありません。
あなたの例では、関数に引数を渡していないので、基本的に、プログラムで参照として関数を使用することは無意味です。一方、次のようなものです。
fn1 = function(x) print(x) end
fn2 = function(x) print("bar") end
t[fn1] = "foo"
t[fn2] = "foo"
for i, v in pairs(t) do i(v) end
その用途があります。
スコープ外になった関数参照をLuaは再利用できますか?
親テーブルがスコープ内にある限り、はい。テーブルは作成および操作されますがコピーされないため、関数参照がテーブルインデックスメモリから非推奨になる可能性はありません。この回答も実際に試した後、後で編集します。
これは問題を引き起こす可能性がありますか、それとも何らかの理由で悪い習慣と見なされますか?
C
などの他の言語に精通しているユーザーは、python
テーブルを読み取るときに配列を念頭に置く傾向があるため、これは悪い習慣と見なされています。luaではそのような心配はなく、プログラムは完璧に機能します。
関数参照の一意性に依存できるかどうかはわかりません。
なんで?