処理よりもメモリ使用量が重要で、上記のように の複数のインスタンスをインスタンス化するオブジェクト指向プログラミングを使用している場合Test
は、メタテーブルを使用する 4 番目のオプションがあります。
TestMt = {}
TestMt.func1 = function(self, ...)
...
end
TestMt.func2 = function(self, ...)
...
end
TestMt.func3 = function(self, ...)
...
end
function new_test()
local t = {}
t.data = ...
setmetatable(t, {__index = TestMt})
return t
end
foo = new_test()
foo:func1()
foo:func2()
foo:func3()
オブジェクト指向の種類のプログラミングを行っている場合、メタテーブルはメモリの大幅な節約につながる可能性があります (この方法で多数の数学的ベクトルに 1 ギガバイト以上を誤って使用したことがありましたが、メタテーブルを使用して 40 メガバイトまで削減しました)。
何度もインスタンス化されるオブジェクトやテーブルではなく、グローバルにアクセス可能な関数を整理するだけなら、ここでメモリを心配するのはばかげています。これは、ファイル システムのオーバーヘッドを削減するために、lua コード全体を 1 つのファイルに入れるようなものです。ごくわずかな節約について話しているので、それを気にするためにも、細心の注意を払った測定に裏打ちされた並外れたユースケースが本当に必要なはずです。
処理に関するものであれば、グローバル関数をネストされたテーブルから除外し、可能な場合はローカル関数を優先することで、いくつかの小さな改善を得ることができます。