Se si tratta di utilizzo della memoria più dell'elaborazione e si utilizza la programmazione orientata agli oggetti in cui si istanziano più istanze di Test
come si è mostrato in precedenza, si dispone di una quarta opzione con metatables.
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()
Se stai facendo sorta orientata agli oggetti di programmazione, metatables possono portare a un massiccio risparmio di memoria (per sbaglio ho usato più di 1 gigabyte una volta per numerosi vettori matematici in questo modo, solo per ridurre il basso per 40 megabyte usando il metatable).
Se non si tratta di oggetti e tabelle che vengono un'istanza molte volte, e solo di organizzare le funzioni globalmente accessibili, preoccuparsi di memoria qui è ridicolo. È come inserire l'intero codice Lua in un unico file per ridurre il sovraccarico del file system. Stai parlando di risparmi così trascurabili che dovresti davvero aver bisogno di un caso di uso straordinario supportato da meticolose misurazioni per preoccuparti anche di questo.
Se si tratta di elaborazione, quindi è possibile ottenere alcuni piccoli miglioramenti, mantenendo le funzioni globali di tabelle nidificate, e favorendo i locali quando possibile.
fonte
2015-05-05 18:41:51
Terzo è meglio di secondo penso, ma non è sicuro – itdxer
cosa vuoi [ottimizzare qui] (http://c2.com/cgi/wiki?PrematureOptimization)? Se si desidera una struttura orientata agli oggetti, utilizzare la prima, se si desidera aggiungere globali, accessibili da qualsiasi luogo, utilizzare la seconda (2 funzioni non costose), se si desidera che le funzioni siano visibili nell'ambito locale, utilizzare la terza opzione . –
Com'è correlato all'ottimizzazione * della memoria *? – lhf