Kavramlar - Userdata
Userdata
Userdata, öncelikli olarak Lua C API'sinde kullanılan, C verisine -örneğin nesneler gibi- işaret eden bir türdür
ve iki çeşidi vardır: tam (full) & hafif (light).
Tam Userdata (Full Userdata)
İnsanlar userdata'dan bahsettiğinde, genellikle full userdata'yı kastederler.
Çoğu zaman, paneller (panels) ve varlıklar (entities) gibi tablolara (tables) benzer şekilde işlev gören
tam userdata nesneleriyle karşılaşırsınız.
newproxy ile boş userdata oluşturabilirsiniz.
Detaylar
Tam userdata'lar metatable'lara sahip olabilir, ancak bunlar dizinlenemez (indexed)
ve table kütüphanesindeki fonksiyonlarla çalışmazlar.
Varlıklar (entities) gibi türlere rastgele değerler atanabilir, çünkü
varlığın userdata metatable'ı, varlığın dahili Lua tablosunda değerleri ayarlamak için __newindex
metametodunu kullanır.
Buna bağlı olarak, __index metametodu da anahtar için
varlığın dahili Lua tablosunu kontrol eder ve değerini döndürür.
Varlıklar gibi türlerin sanki birer tabloymuş gibi
dizinlenebilmesi bu fonksiyonlar sayesindedir.
Tam userdata'lar çöp toplayıcı (garbage collected) tarafından temizlenir ve Lua, userdata'nın kendisini bir argüman olarak geçirerek userdata'nın __gc
metametodunu çağırır ve böylece tam userdata'ya toplanmak üzere olduğunu bildirir.
Bu, C tarafında userdata tarafından kullanılan kaynakların serbest bırakılmasına olanak tanır;
örneğin bir nesneyi silmek veya bir dosya tanıtıcısını (file handle) serbest bırakmak gibi.
Hafif Userdata (Light Userdata)
Hafif userdata, Lua'da bir işaretçiyi (pointer) bir değer olarak temsil eder.
Detaylar
Tam userdata'nın aksine, hafif userdata çöp toplayıcı tarafından temizlenmez,
bireysel bir metatable'ı yoktur ve yalnızca tuttukları işaretçiler eşit olduğunda
diğer hafif userdata'lara eşit olur.
Bu, doğası gereği Garry's Mod'da kullanılmaz.
Daha fazla bilgi için Programming in Lua dokümantasyonuna bakınız.
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord