Sabit Tabloları Dondurma
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 59 / 80.
Sabit bir tablonun bir zayıf yönü vardır: hâlâ sıradan bir tablodur. Herhangi bir kod, herhangi bir yerde, UserRole.Admin = 99 yazabilir ve "sabitleriniz" sessizce sabit olmaktan çıkar.
Luau bu açığı table.freeze ile kapatır. Dondurma, tabloyu çalışma zamanında salt okunur hâle getirir: alan ekleme, değiştirme veya kaldırma girişimleri hata verir. Kullanım biçimi, tabloyu oluşturulduğu yerde dondurmaktır: table.freeze aynı tabloyu döndürür ve tablo atanmaya hazır olur:
local Color = table.freeze({
Red = 1,
Green = 2,
Blue = 3,
})
print(Color.Red) -- 1: okuma her zamanki gibi çalışır
Color.Gold = 4 -- ✗ hata: salt okunur bir tabloyu değiştirme girişimiBu, şimdiye kadarki kurstaki diğer her şeyden farklı olarak çalışma zamanı korumasıdır: düzenleme zamanı uyarısı değil, yazma işlemi çalıştırıldığı anda oluşan gerçek bir hata. Tür denetleyicisinin hiç görmediği kodlara karşı bile koruma sağlar.
Bilmeye değer iki yardımcı işlev: table.isfrozen(t) tablonun dondurulmuş olup olmadığını döndürür ve dondurma sığdır: iç içe tabloları da dondurmadığınız sürece değiştirilebilir kalır. Ayrıca dondurmayı geri alamazsınız: bir tablo dondurulduktan sonra donmuş olarak kalır.
Dondurulmuş bir sabit tablo ile parametreler için bir literal birleşim türü, eksiksiz Luau enum'unu oluşturur: kimsenin müdahale edemeyeceği adlandırılmış çalışma zamanı değerleri ve kullanıldıkları her yerde düzenleme zamanı denetimi.
Görev
KolayHiçbir şeyin değiştiremeyeceği sabit bir tablo oluştur.
local Size = table.freeze({Small = 1, Medium = 2, Large = 3})oluştur.Size.Largevetable.isfrozen(Size)değerlerini yazdır.pcall(function() Size.Huge = 4 end)değerinilocal okiçinde sakla veokdeğerini yazdır.
Kodu Çalıştır düğmesine bas: çıktı 3, true ve false değerlerini gösterir.
Kendin dene
-- 1) local Size = table.freeze({...})
-- 2) Size.Large ve table.isfrozen(Size) değerlerini yazdır
-- 3) yasaklanan yazma işlemi için pcall tarafından döndürülen değeri ok içinde sakla, ardından yazdır
Luau'ya Giriş bölümündeki tüm dersler
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışma
Parametreleri ve Dönüş Değerlerini Tür BelirtmeAnonim Fonksiyonları Tür BelirtmeDeğer Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriBoolean Değerler için VarsayılanlarDeğişken Sayıda Parametre Alan FonksiyonlarFonksiyon Türlerini TanımlamaTekrar: Tür Belirtilmiş Fonksiyonlar2Temel Türler
Number, String ve Boolean'any' Türü: Kaçış Yolu'unknown' TürüNil ve İsteğe Bağlı TürlerTür Çıkarımı UygulamadaAçık Tür Ek AçıklamalarıTekrar: Temel Türler Alıştırması5Diğer Adlar (Aliases), Birleşimler, Kesişimler
İlkel Tipler için Tip Diğer Adları (Type Aliases)Birleşim Tipleri (Union Types)Birleşim Tipleri ile ÇalışmakLiteral (Sabit) TiplerKesişim Tipleri (Intersection Types)Tip Diğer Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları8Enum'lar: Luau Yöntemi
Luau'da Enum DeseniTablolar ile Sayısal Enum'larBirlik Olarak Metin Enum'larıHarfi Birlik Enum'larını KullanmaSabit Tabloları DondurmaÖzet: Enum'lar, Luau Yöntemi3Türlenmiş Tablolar: Diziler ve Map’ler
Türlenmiş DizilerÖğe Ekleme ve OkumaMap Türü Nedir?Map’leri Tanımlama ve ErişmeTablolar Üzerinde YinelemeKarma Şekilli TablolarBir Izgarayı OkumaBir Izgara Oluşturmatable.unpackÖzet: Diziler ve Map’lerKendi başına pratik yap: Online Luau derleyicisi