Membekukan Tabel Konstanta
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 55 dari 73.
Satu kelemahan tabel konstanta: tabel itu tetaplah tabel biasa. Kode apa pun, di mana pun, bisa menulis UserRole.Admin = 99, dan "konstanta" kamu diam-diam tidak lagi konstan.
Luau menutup celah ini dengan table.freeze. Membekukan tabel menjadikannya hanya-baca saat runtime: setiap upaya untuk menambahkan, mengubah, atau menghapus field akan memunculkan error. Pola yang umum adalah membekukan tabel tepat saat tabel itu dibuat: table.freeze mengembalikan tabel yang sama, siap untuk ditetapkan:
local Color = table.freeze({
Red = 1,
Green = 2,
Blue = 3,
})
print(Color.Red) -- 1: membaca nilainya tetap berjalan seperti biasa
Color.Gold = 4 -- ✗ error: mencoba mengubah tabel yang hanya bisa dibacaBerbeda dengan hal lain yang telah kamu pelajari sejauh ini dalam kursus ini, perlindungan ini bekerja saat runtime: error sungguhan muncul tepat saat penulisan dijalankan, bukan peringatan saat penyuntingan. Perlindungan ini bahkan menangkal kode yang tidak pernah diperiksa oleh pemeriksa tipe.
Dua hal terkait yang perlu kamu ketahui: table.isfrozen(t) mengembalikan apakah sebuah tabel dibekukan, dan pembekuan bersifat dangkal: tabel bersarang tetap bisa diubah kecuali kamu juga membekukannya. Kamu juga tidak bisa membatalkan pembekuan: setelah dibekukan, tabel akan tetap beku.
Tabel konstanta beku ditambah union literal untuk parameter adalah enum Luau yang lengkap: nilai runtime bernama yang tidak bisa diutak-atik siapa pun, serta pemeriksaan saat penyuntingan di mana pun nilai tersebut digunakan.
Tantangan
MudahBuat tabel konstanta beku bernama Color, buat dan bekukan dalam satu langkah dengan table.freeze, yang berisi:
Red=1Green=2Blue=3
Buat tabel biasa (tidak beku) bernama settings dengan field volume = 5.
Cetak setiap nilai pada barisnya sendiri:
Color.RedColor.Blue- apakah
Colorbeku (table.isfrozen) - apakah
settingsbeku - hasil percobaan menambahkan field ke
Colordi dalampcall: panggilpcall(function() Color.Gold = 4 end)dan cetak nilai boolean yang dikembalikannya
Coba sendiri
-- Tulis kodemu di sini
-- 1) local Color = table.freeze({Red = 1, Green = 2, Blue = 3})
-- 2) local settings = {volume = 5}
-- 3) Cetak Color.Red, Color.Blue, dan kedua hasil isfrozen
-- 4) Gunakan pcall untuk mencoba penulisan yang dilarang, lalu cetak nilai boolean yang dikembalikan
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengantar Luau
1Memulai dengan Luau
Apa Itu Luau?Mengapa Menggunakan Luau?Kode Luau PertamamuPemeriksaan Tipe dan Mode ErrorRangkuman: Pengenalan Luau4Bekerja dengan Fungsi
Menentukan Tipe Parameter dan Nilai KembalianMenentukan Tipe Fungsi AnonimFungsi yang Tidak Mengembalikan NilaiParameter OpsionalNilai Default ParameterFungsi VariadikMendefinisikan Tipe FungsiRangkuman: Fungsi Bertipe2Tipe Inti
Tipe Dasar: num, str, boolTipe 'any': Jalan Keluar DaruratTipe 'unknown'Nil & Tipe OpsionalInferensi Tipe dalam PraktikAnotasi Tipe EksplisitUlasan: Latihan Tipe Inti5Alias, Union, dan Intersection
Alias Tipe untuk Tipe PrimitifTipe UnionMenggunakan Tipe UnionTipe LiteralTipe IntersectionMenggabungkan Alias TipeRekap: Kombinasi Tipe Lanjutan8Enum, Cara Luau
Pola Enum di LuauEnum Numerik dengan TabelEnum String sebagai UnionMenggunakan Enum Union LiteralMembekukan Tabel KonstantaUlasan: Enum, Cara Luau3Tabel Bertipe: array dan Map
array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMelakukan Iterasi pada TabelTabel dengan Bentuk Campuranarray Bertipe Multidimensitable.unpack dan VarargsRingkasan: array dan MapLatihan sendiri: Compiler Luau online