Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2021-06-10, 14:59


borsuk







Wiek: 17
Na forum: 3547 dni
Posty: 468

Piwa: 15622

Respekt: 412
Respekt: 412

Ostrzeżeń: 80%
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:

Kod:

class klasy_dla_debili:
wiek = 21

def sprawdzWiek(self)
return self.wiek

def __init__(self, w):
self.wiek = w

moja_postac = klasy_dla_debili(12)
print(moja_postac.sprawdzWiek())


Teraz tak, dlaczego nie powiniene? u?ywa? self?w, a napewno nie w taki spos?b (XD)

self={};
bw.structure=function()
    self.tick=getTickCount();
    self.time=60; --in seconds
    self.rot=0;
    self.font=dx:getFont("rbt-l"11);
end;


Og?lnie ten kod nie ma totalnie sensu, selfa u?ywamy wtedy kiedy chcemy zrobi? kilka/kilkana?cie takich samych element?w tylko z innymi danymi, najlepiej jest to zast?pi? createElement, lecz je?eli jeste? bardzo uparty to mo?esz u?y? w selfa w ten spos?b (wymagana biblioteka https://github.com/Yonaba/Lua-Class-System):

Przycisk = class({name "Przycisk"}) -- definicja klasy

function Przycisk:init(xywh) -- konstruktor przyciskuco sie ustawi po wywy?aniu Przycisk(...)
    self.x
    self.y
    self.w
    self.h
end

function Przycisk:setPosition(xy) -- funkcja do zmiany pozycji
    self.x
    self.y
end

-- przyk?ad u?ycia:

local przycisk1 Przycisk(0025050)
local przycisk2 Przycisk(505020020)
przycisk2:setPosition(2020)



pozdrawiam i prosze nie u?ywaj self?w je?eli nie wiesz jak tego robi? bo idzie sie rozp?aka?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2021-06-11, 21:57


marcin778

Krytyk serwerów MTA






Wiek: 24
Na forum: 4149 dni
Posty: 2268
Nick w MP: Marcineg

Piwa: 4662

Respekt: 1436,8
Respekt: 1436,8

Self tak?e jest u?ywane je?li stosujemy metatabele w?asnor?cznie bez u?ycia zewn?trznych bibliotek, o czym nie wspomnia?e?

Postaw piwo autorowi tego posta
 

 
Wysłany: 2021-06-17, 21:39


Tey







Wiek: 31
Na forum: 4876 dni
Posty: 155
Nick w MP: l0nger

Piwa: 280

Respekt: 193
Respekt: 193Respekt: 193

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:
Pawn
buttons = {}

function buttons:init(wh)
  local b = {}
  setmetatable(b, { __index self })
  b.w
  b.h

  return b
end

function buttons:setPos(wh)
  self.wself.wh
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:
Kod:

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

Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
_jvneczek
Tagi: selfy :: dlaczego :: źle :: używasz
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Poradniki do LUA Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

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
Dodaj temat do Ulubionych
Wersja do druku