Siema przyszed?em wyja?ni? na czym polegaj? "selfy" w lua bo z tego co widze to du?o os?b u?ywa ich bez kompletnej wiedzy do czego s?u??.
Wi?c mo?e zaczne od wyja?nienia, co to jest self i sk?d sie wzi??. Selfy s?u?? do obiektowego programowania w klasach w j?zykach typu python itd. Przyk?ad u?ycia selfa w pythonie:
Teraz tak, dlaczego nie powiniene? u?ywa? self?w, a napewno nie w taki spos?b (XD)
Kod (ten drugi) troch? bezsensu, nie jest za bardzo wyja?nione dlaczego jak ani kiedy mo?emy u?ywa? "self" w Lua. Mo?e zacznijmy od tego, ?e "self" to po prostu skr?t zmiennej w programowaniu obiektowym tak jak w Javascript s?u?y do tego zmienna "this". Po drugie, aby u?ywa? self nie potrzeba jakich? dodatkowych bibliotek jak to autor w?tku wspomnia? o nawet ca?kiem przyjaznym skrypcie do klas, aczkolwiek tamta biblioteka nawi?zuje do wszystkich element?w zaimplementowych w MTA. Reasumuj?c... by stworzy? prost? klas? w Lua i u?ywa? "self", mo?na pobawi? si? z metatabelami (je?eli kto? nie wie, zalecam zagl?bni? si? co skrywa metatabela) przypisuj?c indeks (w?a?ciwo?? indexu) tabeli do "self".
Zainstruuj? poni?ej kodem:
buttons = {}
function buttons:init(w, h)
local b = {}
setmetatable(b, { __index = self })
b.w = w
b.h = h
return b
end
function buttons:setPos(w, h)
self.w, self.h = w, h
end
function buttons:getPos()
return tostring(self.w..", "..self.h)
end
local button_first = buttons:init(20,40)
print(button_first:getPos())
button_first:setPos(50,100)
local button_second = buttons:init(30,60)
print(button_first:getPos(),button_second:getPos())
Wynik:
20, 40
50, 100 30, 60
Wniosek? Kiedy tworzymy obiekt button_first czy button_second przypisuje metatabele obiektu oraz metatabele __index ze zmiennej buttons, kt?ra jest rezerw?, wi?c je?eli ?adna w?a?ciwo?? nie zostanie przypisana do obiektu, zostanie u?yta z rezerwy tutaj __index buttons
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach