Jeśli chodzi o użycie pamięci w większym stopniu niż przetwarzanie i używasz programowania obiektowego, gdzie tworzysz wiele wystąpień Test
, jak pokazano powyżej, masz czwartą opcję z 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()
Jeśli robisz obiektowego rodzaj programowania, metatables może prowadzić do ogromnych oszczędności w pamięci (I przypadkowo wykorzystane w ciągu 1 gigabajt raz dla licznych wektorów matematycznych w ten sposób, tylko zmniejszyć ją do 40 megabajtów za pomocą metatable).
Jeśli nie chodzi o obiekty i tabele, które pojawiają się wiele razy, a tylko o organizowanie funkcji dostępnych na całym świecie, martwienie się o pamięć jest śmieszne. To jak umieszczanie całego kodu lua w jednym pliku w celu zmniejszenia obciążenia systemu plików. Mówisz o tak niewielkich oszczędnościach, że naprawdę potrzebujesz nadzwyczajnego przypadku użycia, popartego drobiazgowymi pomiarami, aby nawet się tym zająć.
Jeśli chodzi o przetwarzanie, można wprowadzić drobne usprawnienia, utrzymując funkcje globalne z zagnieżdżonych tabel i preferując lokalne, jeśli to możliwe.
Trzecia jest lepsza niż druga myśl, ale nie jestem pewna, – itdxer
co chcesz [zoptymalizować tutaj] (http://c2.com/cgi/wiki?PrematureOptimization)? Jeśli chcesz obiektowo-podobną strukturę, użyj pierwszego, jeśli chcesz dodać globale, dostępne z dowolnego miejsca, użyj drugiego (2 funkcje nie są drogie), jeśli chcesz, aby funkcje były widoczne w twoim zasięgu lokalnym, użyj trzeciej opcji . –
Jak to się ma do optymalizacji * pamięci *? – lhf