Lua Hile Sayfası
Son güncelleme
Hello World ve kod çalıştırma
Lua minimaldir - tek bir ifade çalışır.
| İşlem | Söz dizimi |
|---|---|
| Bir satır yazdır | print("Hello, World!") |
| Birden fazla değeri yazdır | print("x", 1, true) |
| Satır sonu olmadan yaz | io.write("Hi") |
| Yorum | -- this is a comment |
| Çok satırlı yorum | --[[ ... ]] |
| Dizeleri birleştir | print("Hi " .. name) |
| Bir dosyayı çalıştır | lua app.lua |
| Etkileşimli kabuk | lua |
Değişkenler ve tipler
Değişkenler varsayılan olarak globaldir; yerelleri local ile tanımlayın.
| İşlem | Söz dizimi |
|---|---|
| Yerel değişken | local age = 30 |
| Global değişken | count = 0 |
| Çoklu atama | local a, b = 1, 2 |
| Sekiz tip | nil, boolean, number, string, table, function, userdata, thread |
| Nil / boolean'lar | nil, true, false |
| Tipi kontrol et | type(x), "number" döndürür |
| Sayıya dönüştür | tonumber("42") |
| Dizeye dönüştür | tostring(42) |
Dizeler
Dizeler değiştirilemezdir; hem tek hem çift tırnak çalışır.
| İşlem | Söz dizimi |
|---|---|
| Uzunluk | #s veya string.len(s) |
| Birleştir | s1 .. s2 |
| Büyük / küçük harf | s:upper(), s:lower() |
| Alt dize | s:sub(1, 3) |
| Alt dize bul | s:find("ell") |
| Değiştir (gsub) | s:gsub("a", "b") |
| Biçimlendir | string.format("%05d", 42) |
| Uzun dize | [[ multi\nline ]] |
Table'lar (temel veri yapısı)
Table'lar Lua'nın tek yapısal tipidir - dizi, map ve nesne olarak iş görürler.
| İşlem | Söz dizimi |
|---|---|
| Boş table | local t = {} |
| Dizi tarzı (1 tabanlı) | local t = {10, 20, 30} |
| Dizi elemanına eriş | t[1] (ilk eleman) |
| Map tarzı table | local u = {name = "Ada", age = 30} |
| Map değerine eriş | u.name veya u["name"] |
| Bir değer ayarla | t[4] = 40, u.email = "a@x.com" |
| Dizi kısmının uzunluğu | #t |
| Diziyi dolaş (ipairs) | for i, v in ipairs(t) do ... end |
| Tüm anahtarları dolaş (pairs) | for k, v in pairs(u) do ... end |
| İç içe table | local m = {a = {1, 2}} |
Kontrol akışı
Bloklar end ile kapanır; yalnızca nil ve false yanlış (falsy) değerdir.
| İşlem | Söz dizimi |
|---|---|
| If / elseif / else | if x > 0 then ... elseif x < 0 then ... else ... end |
| Mantıksal operatörler | and, or, not |
| Sayısal for | for i = 1, 10 do ... end |
| Adımlı for | for i = 10, 1, -1 do ... end |
| While döngüsü | while x < 100 do ... end |
| Repeat-until | repeat ... until done |
| Break | break |
| Eşit değil operatörü | if a ~= b then ... end |
Fonksiyonlar
Fonksiyonlar birinci sınıf değerlerdir ve birden fazla sonuç döndürebilir.
| İşlem | Söz dizimi |
|---|---|
| Bir fonksiyon tanımla | function add(a, b) return a + b end |
| Yerel fonksiyon | local function square(x) return x * x end |
| Anonim fonksiyon | local f = function(x) return x * 2 end |
| Birden fazla geri dönüş değeri | function bounds() return 1, 10 end |
| Birden fazla dönüşü yakala | local lo, hi = bounds() |
| Variadic fonksiyon | function sum(...) ... end |
| Varargs'ı topla | local args = {...} |
| Metot (iki nokta söz dizimi) | function obj:greet() ... end |
String kütüphanesi
String kütüphanesinden yaygın fonksiyonlar (s:fn() olarak çağrılabilir).
| Fonksiyon | Ne yapar |
|---|---|
string.len(s) | Dizenin uzunluğu |
string.sub(s, i, j) | i indeksinden j indeksine alt dize |
string.upper(s) | Büyük harfli kopya |
string.rep(s, n) | Dizeyi n kez tekrarla |
string.find(s, p) | Bir desen bul, başlangıç/bitiş döndürür |
string.match(s, p) | İlk desen eşleşmesini döndür |
string.gsub(s, p, r) | Tüm desen eşleşmelerini değiştir |
string.format(fmt, ...) | Değerleri bir dizeye biçimlendir |
Table ve math kütüphaneleri
Dizi tarzı table'lar ve sayılarla çalışmak için yardımcılar.
| Fonksiyon | Ne yapar |
|---|---|
table.insert(t, v) | Sona bir değer ekle |
table.insert(t, i, v) | v'yi i konumuna ekle |
table.remove(t, i) | i'deki elemanı kaldır ve döndür |
table.concat(t, ", ") | Elemanları bir dizeye birleştir |
table.sort(t) | Diziyi yerinde sırala |
math.floor(x) / math.ceil(x) | Aşağı / yukarı yuvarla |
math.max(...) / math.min(...) | En büyük / en küçük argüman |
math.random(1, 6) | Bir aralıkta rastgele tam sayı |
Metatable'lar (kısaca)
Metatable'lar, table'ların nasıl davrandığını özelleştirmenizi sağlar - operatörler, indeksleme ve daha fazlası.
| İşlem | Söz dizimi |
|---|---|
| Bir metatable ayarla | setmetatable(t, mt) |
| Bir metatable al | getmetatable(t) |
| Eksik anahtarlar için yedek | mt.__index = defaults |
| Fonksiyonla varsayılan | mt.__index = function(t, k) ... end |
| Toplamayı özelleştir | mt.__add = function(a, b) ... end |
| tostring'i özelleştir | mt.__tostring = function(t) ... end |
| Prototip tabanlı OOP | mt.__index = ClassTable |
En çok başvurduğunuz Lua söz dizimi tek sayfada. Bu Lua hile sayfası, temel dil için hızlı bir başvurudur - değişkenler ve tipler, dizeler, kontrol akışı, fonksiyonlar ve Lua'nın tek, esnek veri yapısı olarak hizmet eden table'lar, ayrıca standart kütüphanelere ve metatable'lara bir bakış.
Buradaki her şey standart Lua'dır ve sıradan bir yorumlayıcıda çalışır. İhtiyacınız olanı kopyalayın ya da her kod parçasını Lua playground'da canlı deneyin - kurulum gerekmez.
Lua hile sayfası SSS
Bu Lua hile sayfası ücretsiz mi?
Bir Lua table'ı hem dizi hem map nasıl olabilir?
{10, 20, 30}) table bir dizi gibi davranır; dize anahtarları kullandığınızda ({name = "Ada"}) bir map gibi davranır. Hatta aynı table'da ikisini de karıştırabilirsiniz. İşte bu yüzden Lua'nın yalnızca tek bir yapısal tipe ihtiyacı vardır - table; dizileri, sözlükleri, kümeleri ve nesneleri kapsar.Lua neden 1 tabanlı indeksleme kullanır?
t[1] ilk eleman, #t ise sayıdır. Uzunluk operatörü # ve table.insert ile ipairs gibi kütüphane fonksiyonlarının tümü bu 1 tabanlı geleneği varsayar, bu yüzden ona bağlı kalmak dizi kodunuzu beklendiği gibi çalışır tutar.