Extension:Scribunto/Lua kaynak kılavuzu

This page is a translated version of the page Extension:Scribunto/Lua reference manual and the translation is 100% complete.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Esperanto • ‎Tiếng Việt • ‎Türkçe • ‎asturianu • ‎català • ‎español • ‎français • ‎italiano • ‎magyar • ‎polski • ‎português do Brasil • ‎русский • ‎українська • ‎עברית • ‎ဖၠုံလိက် • ‎မြန်မာဘာသာ • ‎中文 • ‎日本語 • ‎한국어
kısayollar:
Lua manual
LUAREF

Bu kılavuz, MediaWiki'de Scribunto uzantısıyla kullanıldığı için Lua belgelemektedir. Bazı parçalar MIT lisansı altında bulunan Lua 5.1 kaynak kılavuzundan türetilmiştir.

Giriş

Başlarken

Scribunto'nun etkin olduğu bir MediaWiki vikide, "Modül:" ile başlayan bir başlık içeren bir sayfa oluşturun, örneğin Modül:Muzlar". Bu yeni sayfaya aşağıdaki metni kopyalayın:

local p = {} --p, paket kalır

function p.hello( frame )
    return "Hello, world!"
end

return p

Bunu kaydedin, sonra başka bir (modül olmayan) sayfaya şunu yazın:

{{#invoke:Bananas|hello}}

Bunun dışında "Muzlar"'ı modülünüzün adı ile değiştirmelisiniz. Bu, o modülden dışa aktarılan "merhaba" işlevini çağıracaktır. {{#invoke:Bananas|hello}}, işlevin döndürdüğü metinle değiştirilir, bu durumda "Hello, world!"

Lua kodunu şablon bağlamından çağırmak genellikle iyi bir fikirdir. Bu, çağıran bir sayfa açısından sözdiziminin, şablon mantığının Lua veya vikimetinde uygulanmasından bağımsız olduğu anlamına gelir. Ayrıca, bir vikinin içerik ad alanına ek karmaşık sözdiziminin eklenmesini önler.

Modül yapısı

Modülün kendisi, {{#invoke:}} tarafından çağrılabilecek işlevleri içeren bir Lua tablosu döndürmelidir. Genel olarak, yukarıda gösterildiği gibi, bir tablo tutan bir yerel değişken bildirilir, işlevler bu tabloya eklenir ve tablo modül kodunun sonunda döndürülür.

İster yerel ister genel olsun, bu tabloya eklenmeyen işlevlere {{#invoke:}} ile erişilemez, ancak küreselleri $requir_function kullanılarak yüklenen diğer modüllerden erişilebilir. Modülün tüm işlevleri ve değişkenleri yerel olarak bildirmesi genellikle iyi bir stildir.

Parametrelere vikimetinden erişme

{{#invoke:}} tarafından çağrılan işlevlere çerçeve nesnesi olan tek bir parametre aktarılacaktır. {{#invoke:}} ile iletilen parametrelere erişmek için, kod genellikle args o çerçeve nesnesinin tablosunu kullanır. {{#invoke:}} içeren şablona geçirilen parametrelere frame:getParent() kullanarak ve bu karenin args erişerek de erişmek mümkündür.

Bu çerçeve nesnesi, çağıran ayrıştırıcı işlevlerini, genişletme şablonları ve genişletme rastgele vikimetin dizeleri gibi bağlama özgü özelliklere erişmek için de kullanılır.

Metin döndürme

Modül işlevi genellikle tek bir dize döndürmelidir; döndürülen değerler tostring() ile geçirilir ve ayırıcı olmadan birleştirilir. Bu dize, {{#invoke:}} sonucunda vikimetine eklenir.

Sayfa ayrıştırmasındaki bu noktada, şablonlar zaten genişletildi, ayrıştırıcı işlevleri ve uzantı etiketleri zaten işlendi ve ön kayıt dönüşümleri (örneğin, imza tilde genişletme ve boru hilesi) zaten oldu. Bu nedenle modül, çıkış metninde bu özellikleri kullanamaz. Örneğin, bir modül "Hello, [[world]]! {{welcome}}" döndürürse, sayfada "Hello, world! {{welcome}}" görünür.

Öte yandan, değiştirme daha erken bir işleme aşamasında ele alındığından, {{subst:#invoke:}} ile yalnızca diğer denenen ikameler işlenecektir. Başarısız olan ikame vikimetinde kalacağından, sonraki düzenlemede işlenecektir. Bundan genellikle kaçınılmalıdır.

Modül belgesi

Scribunto, modülün otomatik olarak bir vikimetin belgelendirme sayfası ile ilişkilendirilmesiyle modüllerin belge edilmesine izin verir; varsayılan olarak, modülün "/belge" alt sayfası bu amaçla kullanılır ve modül sayfasındaki modül kaynak kodunun üzerinde yer alır. Örneğin, "Modül:Muz" belgesini "Modül:Muz/belge" olurdu.

Bu, aşağıdaki MediaWiki ad alanı iletileri kullanılarak yapılandırılabilir:

  • scribunto-doc-page-name: Belgelendirme için kullanılan sayfanın adını belirler. Modülün adı (Modül: öneki olmadan) $1 olarak geçirilir. Modül ad alanında ise, burada belirtilen sayfalar Lua kaynağı yerine wikitext olarak yorumlanır ve {{#invoke:}} ile kullanılamaz. Varsayılan, "Modül:$1/belge", yani modülün /belge alt sayfasıdır. Ayrıştırıcı işlevlerinin ve diğer küme ayracı genişletmesinin bu iletide kullanılamayabileceğini unutmayın.
  • scribunto-doc-page-does-not-exist: Belge sayfası mevcut olmadığında görüntülenen mesaj. Sayfanın adı $1 olarak geçirilir. Varsayılan değer boştur.
  • scribunto-doc-page-show: belge sayfası mevcut olduğunda görüntülenen mesaj. Sayfanın adı $1 olarak geçirilir. Varsayılan, dokümantasyon sayfasını aşmaktır.
  • scribunto-doc-page-header: Belge sayfası görüntülenirken başlık görüntülenir. Belgelenen modülün adı (Modül: öneki ile) $1 olarak geçirilir. Varsayılan, eğik olarak kısa bir açıklama görüntüler.

Modüllerin doğrudan kategorilere ayrılamadığını ve vikiarası bağlantılarının doğrudan eklenemeyeceğini unutmayın. Bunlar, belge sayfası modül sayfasına aktarıldığında modüle uygulanacakları <includeonly>...</includeonly> etiketlerinin içindeki belgelendirme sayfasına yerleştirilebilir.

Lua dili

Anahtarlar

Lua'daki bir ad (tanımlayıcı olarak da adlandırılır), herhangi bir harf, rakam ve alt çizgi olabilir, bir rakamla başlamaz. İsimler büyük / küçük harfe duyarlıdır; "foo", "Foo" ve "FOO" hepsi farklı adlardır.

Aşağıdaki anahtar kelimeler saklıdır ve ad olarak kullanılamaz:

  • and
  • break
  • do
  • else
  • elseif
  • end
  • false
  • for
  • function
  • if
  • in
  • local
  • nil
  • not
  • or
  • repeat
  • return
  • then
  • true
  • until
  • while

Alt çizgi ile başlayan ve büyük harfler ile başlayan isimler dahili Lua global değişkenleri için ayrılmıştır.

Diğer anahtarlar:

  • #
  • %
  • (
  • )
  • *
  • +
  • ,
  • -
  • .
  • ..
  • ...
  • /
  • :
  • ;
  • <
  • <=
  • =
  • ==
  • >
  • >=
  • [
  • ]
  • ^
  • {
  • }
  • ~=

Yorumlar

Yorum, bir dizenin dışında herhangi bir yerde -- ile başlar. -- hemen bir açılış uzun parantez takip ederse, yorum ilgili kapanış uzun parantezine devam eder; aksi takdirde yorum geçerli satırın sonuna kadar devam eder.

-- Lua'daki bir yorum çift tire ile başlar ve satırın sonuna kadar devam eder.
--[[ Çok satırlı dizeler ve yorumlar
     çift köşeli parantezlerle süslenmiştir. ]]
--[=[ Bunun gibi yorumlar başka --[[comments]] iç içe olabilir. ]=]
--[==[ Bunun gibi yorumlar başka uzun olabilir
      --[===[ --[=[comments]=] hepsi eşleşen
        ]===] uzun köşeli ayraçlar ile sınırlandırılmamış olsa bile,
      --[[ birden çok kez saygılı olabilir! ]===]
  ]==]

Veri türleri

Lua, dinamik olarak yazılan bir dildir, yani değişkenlerin ve işlev bağımsız değişkenlerinin türü yoktur, yalnızca kendilerine atanan değerler vardır. Tüm değerler bir tür taşır.

Lua'nın sekiz temel veri türü vardır, ancak yalnızca altı tanesi Scribunto uzantısıyla ilgilidir. type() işlevi bir değerin türünü döndürür.

tostring() işlevi, bir değeri dizeye dönüştürür. tonumber() işlevi, bir değeri mümkünse bir sayıya dönüştürür, aksi takdirde nil değerini döndürür. Bir değeri diğer veri türlerine dönüştürecek açık işlevler yoktur.

Bir dizenin beklendiği yerlerde kullanıldığında sayılar otomatik olarak dizelere dönüştürülür, ör. birleştirme operatörü ile birlikte kullanıldığında. tonumber() tarafından tanınan dizeler, aritmetik işleçlerle kullanıldığında otomatik olarak sayılara dönüştürülür. Bir boolean değeri beklendiğinde, nil ve false dışındaki tüm değerlerin true olduğu kabul edilir.

nil

"nil", bir değerin yokluğunu temsil eden nil veri tipidir.

Nil, tabloda anahtar olarak kullanılamaz ve atanmamış bir tablo anahtarı ile sıfır değeri atanan anahtar arasında fark yoktur.

Bir dizgeye dönüştürüldüğünde sonuç "nil" olur. Boole'ye dönüştürüldüğünde, nil false kabul edilir.

boole

Boole değerleri true ve false.

Bir dizeye dönüştürüldüğünde sonuç "true" veya "false" olur.

Diğer birçok dilden farklı olarak, boole değerleri doğrudan sayılara dönüştürülmeyebilir. Diğer birçok dilden farklı olarak, boole dönüşümü için yalnızca false ve nil yanlış kabul edilir; 0 sayısı ve boş dizenin ikisi de doğru olarak kabul edilir.

dize

Lua dizeleri 8 bit baytlık bir dizi olarak kabul edilir; bunları belirli bir kodlamada yorumlamak uygulamaya bağlıdır.

Dize değişmezleri tek veya çift tırnak (' veya ") ile sınırlandırılabilir; JavaScript gibi ve PHP'den farklı olarak, ikisi arasında fark yoktur. Aşağıdaki kaçış dizileri tanınır:

  • \a (çan, bayt 7)
  • \b (geri boşluk, bayt 8)
  • \t (yatay sekme, bayt 9)
  • \n (satırsonu, bayt 10)
  • \v (dikey sekme, bayt 11)
  • \f (form besleme, bayt 12)
  • \r (satır başı, bayt 13)
  • \" (çift tırnak, bayt 34)
  • \' (tek tırnak, bayt 39)
  • \\ (ters eğik çizgi, bayt 92)

Değişmez bir satırsonu, bir ters eğik çizgi ile önüne eklenerek bir dizeye dahil edilebilir. Baytlar ayrıca '\ddd' bir kaçış dizisi kullanılarak belirtilebilir; burada ddd, 0-255 aralığındaki baytın ondalık değeridir. Çıkış dizilerini kullanarak Unicode karakterleri dahil etmek için, UTF-8 kodlaması için ayrı baytlar belirtilmelidir; genel olarak, doğrudan Unicode karakterleri girmek daha kolay olacaktır.

Değişmez dizeler ayrıca uzun parantezler kullanılarak tanımlanabilir. Bir açma uzun braketi, bir açılış kare braketinden sonra sıfır veya daha fazla eşit işaret ve ardından başka bir açılış kare braketinden oluşur; [[, [=[ veya [=====[. Açma uzun braketi, karşılık gelen kapanma uzun braketi ile eşleşmelidir, örn. ]], ]=] veya ]=====]. Özel bir durum olarak, eğer bir açılış uzun braketini hemen bir yeni satır takip ederse, yeni satır dizeye dahil edilmez, ancak kapanış uzun braketin korunmasından hemen önce yeni satır eklenir. Uzun parantezler ile sınırlanan dizeler kaçış dizilerini yorumlamaz.

-- Bu uzun dize
foo = [[
bar\tbaz
]]

-- bu teklif sınırlamalı dizeye eşdeğerdir
foo = 'bar\\tbaz\n'

Boole biçimine dönüştürüldüğünde tüm dizelerin true olarak kabul edildiğini unutmayın. Bu, boş dizenin genellikle yanlış olarak kabul edildiği diğer birçok dilden farklıdır.

sayı

Lua, yalnızca dahili olarak çift kesinlikli kayar nokta değeri olarak temsil edilen yalnızca bir sayısal türe sahiptir. Bu biçimde, -9007199254740992 ve 9007199254740992 arasındaki tamsayılar tam olarak temsil edilebilirken, kesirli kısmı olan daha büyük sayılar ve sayılar yuvarlama hatasından muzdarip olabilir.

Sayı sabitleri, ondalık ayırıcı olarak nokta (.) kullanılarak ve grup ayırıcılar olmadan ör. 123.456,78. Sayılar boşluk olmadan E notasyonu kullanılarak da temsil edilebilir, örn. 1.23e-10, 123.45e20 veya 1.23E5. Tamsayılar ayrıca bir 0x öneki kullanılarak onaltılık gösterimde de belirtilebilir, ör. 0x3A.

NaN ve pozitif ve negatif sonsuzluklar doğru şekilde saklanıp işlense de, Lua karşılık gelen değişmez değerleri sağlamaz. math.huge sabiti, 1/0 gibi bir bölme gibi pozitif sonsuzdur ve 0/0 gibi bir bölme olabilir hızla bir NaN oluşturmak için kullanılır.

Boole'ye dönüştürüldüğünde tüm sayıların doğru sayıldığını unutmayın. Bu, 0 sayısının genellikle yanlış olarak kabul edildiği diğer birçok dilden farklıdır. Bir dizgeye dönüştürüldüğünde, sonlu sayılar ondalık sayı, büyük olasılıkla E gösteriminde gösterilir; NaN "nan" veya "-nan"; ve infinities "inf" veya "-inf".

tablo

Lua tabloları, PHP dizileri ve JavaScript nesneleri gibi ilişkilendirilebilir dizilerdir.

Tablolar kıvırcık parantez kullanılarak oluşturulur. Boş tablo {}. Oluşturmadaki alanları doldurmak için, ayraçlara virgül ve/veya noktalı virgülle ayrılmış alan belirteçleri listesi eklenebilir. Bunlar birkaç formdan herhangi birini alır:

  • [deyim1] = deyim2, anahtar olarak deyim1 öğesinin (ilk) değerini ve değer olarak deyim2 öğesinin (ilk) değerini kullanır.
  • ad = deyim, ["ad"] = deyimin eşdeğerdir
  • deyim, kabaca [i] = deyim ile eşdeğerdir, burada i 1'den başlayan ve bu formun her alan spesifikasyonu ile artan bir tamsayıdır. Bu son alan belirleyicisiyse ve ifadede birden çok değer varsa, tüm değerler kullanılır; aksi takdirde sadece birincisi tutulur.

Bir tablodaki alanlara köşeli ayraç notasyonu kullanılarak erişilebilir, ör. table[key]. Ayrıca geçerli olan ad dize anahtarlarına nokta gösterimi kullanılarak da erişilebilir, ör. table.key, table['key'] eşittir. Tablodaki bir değer olan bir işlev çağrıldığında iki nokta üst üste işareti kullanılabilir; örneğin, table:func( ... ), table['func']( table, ... ) veya table.func( table, ... ) eşdeğerdir.

Bir dizi, 1'den N'ye kadar olan tüm pozitif tamsayılar için sıfır olmayan değerlere sahip olan ve N'den büyük olan tüm pozitif tamsayılar için hiçbir değer (nil) olmayan bir tablodur. Birçok Lua işlevi yalnızca dizilerde çalışır ve pozitif olmayanları yoksay.

PHP veya JavaScript gibi diğer birçok dilden farklı olarak, nil ve NaN dışındaki herhangi bir değer anahtar olarak kullanılabilir ve tür dönüştürme yapılmaz. Bunların hepsi geçerli ve farklıdır:

-- Tablo oluştur
t = {}
t["foo"] = "foo"
t.bar = "bar"
t[1] = "bir"
t[2] = "iki"
t[3] = "üç"
t[12] = "on iki numara"
t["12"] = "on iki dize"
t[true] = "true"
t[tonumber] = "evet, işlevler bile tablo anahtarları olabilir"
t[t] = "evet, bir tablo da bir tablo anahtarı olabilir. Kendi içinde bile."

-- Bu, yukarıdakilere kabaca eşdeğer bir tablo oluşturur
t2 = {
    foo = "foo",
    bar = "bar",
    "bir",
    "iki",
    [12] = "on iki numara",
    ["12"] = "on iki dize",
    "üç",
    [true] = "true",
    [tonumber] = "evet, işlevler bile tablo anahtarları olabilir",
}
t2[t2] = "evet, bir tablo da bir tablo anahtarı olabilir. Kendi içinde bile."

Benzer şekilde, nil dışındaki herhangi bir değer bir tabloda değer olarak saklanabilir. Nil'in depolanması, anahtarın tablodan silinmesine eşdeğerdir ve ayarlanmamış herhangi bir anahtara erişmek sıfır değeriyle sonuçlanır.

Tabloların hiçbir zaman Lua'da dolaylı olarak kopyalanmadığını unutmayın; bir tablo işleve bağımsız değişken olarak iletilirse ve işlev tablodaki anahtarları veya değerleri değiştirirse, bu değişiklikler arayanda görünür olur.

Bir dizeye dönüştürüldüğünde, normal sonuç "tablo" olur ancak __tostring metamethod kullanılarak geçersiz kılınabilir. Boş tablo bile bir boolean olarak kabul edilir.

işlev

Lua'daki işlevler birinci sınıf değerlerdir: anonim olarak oluşturulabilir, bağımsız değişken olarak geçirilebilir, değişkenlere atanabilir vb.

İşlevler function anahtar sözcüğü kullanılarak oluşturulur ve parantez kullanılarak çağrılır. Sözdizimsel şeker adlandırılmış işlevler, yerel işlevler ve bir tabloya üye işlevleri gibi işlev gören işlevler için kullanılabilir. Ayrıntılar için aşağıdaki İşlev bildirimleri ve İşlev çağrılarına bakın.

Lua işlevleri kapanışlarıdır , yani bildirildikleri kapsama bir referans sağlarlar ve bu kapsamdaki değişkenlere erişebilir ve bunları değiştirebilirler.

Tablolarda olduğu gibi, bir işlev farklı bir değişkene atanırsa veya başka bir işleve bağımsız değişken olarak iletilirse, çağrılması gereken temel "işlev nesnesidir".

Bir dizgeye dönüştürüldüğünde sonuç "işlev" olur.

Desteklenmeyen türler

userdata türü, diğer dillerde yazılmış Lua uzantıları için opak değerleri tutmak için kullanılır; örneğin, bir C işaretçisi veya yapısı tutmak için bir kullanıcı verisi kullanılabilir. Özel derlenmiş koda izin verilmeyen barındırma ortamlarında Scribunto'nun kullanılmasına izin vermek için bu tür uzantılar kullanılmaz.

thread türü, Scribunto'nun sanal alanında bulunmayan eşyordamlar tutamaçlarını temsil eder.

Meta tablolar

Her tablonun metatable olarak bilinen ilişkili bir tablosu olabilir. Meta tablodaki alanlar, tablo için farklı veya geri dönüş davranışı belirtmek için bazı işleçler ve işlevler tarafından kullanılır. Bir tablo için metatable'a getmetatable() işlevi kullanılarak erişilebilir ve setmetatable() işlevi ile ayarlanabilir.

Meta işlevleri için erişilirken, metatable alanlarına rawget() ile erişilir.

Tablonun kendisini etkileyen metatable alanları şunlardır:

__index
Bu, bir tablo erişimi t[key] nil döndüreceği zaman kullanılır. Bu alanın değeri bir tablo ise, erişim o tabloda tekrarlanır, yani __index[key] (bu tablonun metatable __index'ini çağırabilir). Bu alanın değeri bir işlevse, işlev __index( t, key ) olarak adlandırılır. rawget() işlevi bu metametriyi atlar.
__newindex
Bu, bir tabloya t[key] = value anahtarını atarken kullanılır; burada rawget( t, key ) sıfır döndürür. Bu alanın değeri bir tablo ise, atanması o tabloda tekrarlanır, yani. __newindex[key] = value (metatable __newindex tablosunu çağırabilir). Bu alanın değeri bir işlevse, işlev __newindex( t, key, value ) olarak adlandırılır. rawset() işlevi bu metametriyi atlar.
__call
Bu, bir tabloda işlev çağrısı sözdizimi kullanıldığında kullanılır, t( ··· ). Değer, __call( t, ··· ) gibi bir işlev olarak adlandırılan bir işlev olmalıdır.
__mode
Bu, zayıf kaynakça içeren tablolar yapmak için kullanılır. Değer bir dize olmalıdır. Varsayılan olarak, anahtar olarak veya tablodaki bir değer olarak kullanılan hiçbir değer çöp toplanmaz. Ancak bu meta alan 'k' harfini içeriyorsa, zayıf olmayan kaynakça yoksa anahtarlar çöp toplanabilir ve 'v' değerleri içeriyorsa, her iki durumda da, karşılık gelen anahtar ve değer tablodan kaldırılır. Tablonun metatable olarak kullanıldıktan sonra bu alan değiştirilirse, davranışın tanımsız olduğunu unutmayın.

Diğer metatable alanları şunları içerir:

İkili işleçler için, Lua önce sol bağımsız değişkenin metatable'ına (varsa), sonra da sağa bir metamethod ararken bakar.
İlişkisel işleçler için meta yöntem yalnızca her iki bağımsız değişkenin meta tablolarında da aynı işlev belirtilirse kullanılır. Özdeş beden ve kapanma ile bile farklı anonim işlevler aynı kabul edilemez.
* __metatable hem getmetatable() hem de setmetatable() öğelerini etkiler

Not: Lua'da tüm dizeler, __index, string tablosuna kaynakladığı tek bir metatable'ı da paylaşır. Bu metatable'a Scribunto'da veya kaynaklanan string tablosuna erişilemez; modüllerin kullanabileceği dize tablosu bir kopyadır.

Değişkenler

Değişkenler, değerleri depolayan yerlerdir. Lua'da üç tür değişken vardır: küresel değişkenler, yerel değişkenler ve tablo alanları.

name genel veya yerel bir değişkeni (veya yalnızca bir tür yerel değişken olan bir işlev bağımsız değişkenini) temsil eder. local anahtar sözcüğü kullanılarak açıkça yerel olarak bildirilmedikçe değişkenlerin global olduğu varsayılır. Bir değer atanmamış herhangi bir değişkenin nil değeri olduğu kabul edilir.

Küresel değişkenler, ortam adı verilen standart bir Lua tablosunda saklanır; bu tablo genellikle _G genel değişkeni olarak bulunur. Bu genel değişken tablosu için bir metatable ayarlamak mümkündür; __index ve __newindex metamethod'ları, diğer tüm tablolardaki alanlara erişim ve atamalarda olduğu gibi global değişkenlere erişim ve atamalarda çağrılır.

Bir işlevin ortamına getfenv() işlevi kullanılarak erişilebilir ve setfenv () işlevi kullanılarak değiştirilebilir; Scribunto'da, eğer mevcutsa bu işlevler ciddi şekilde kısıtlanmıştır.

Yerel değişkenler sözlüksel olarak kapsamlıdır; ayrıntılar için Yerel değişken bildirimlerine bakın.

İfadeler

İfade değerleri olan bir şeydir: değişmez değerler (sayılar, dizeler, true, false, nil), anonim işlev bildirimleri, tablo kurucuları, değişken başvuruları, işlev çağrıları, vararg ifadesi, ifadeler parantez içine alınmış, ifadelere uygulanan tekli işleçler ve ikili işleçlerle birleştirilmiş ifadeler.

Çoğu ifadenin bir değeri vardır; işlev çağrıları ve vararg ifadesi herhangi bir sayı içerebilir. Bir işlev çağrısını veya vararg ifadesini parantez içine almanın ilk değer dışındaki tüm öğelerin kaybolacağını unutmayın.

İfade listeleri, virgülle ayrılmış ifade listeleridir. Son ifade hariç tümü bir değere zorlanır (ek değerler düşer veya ifadede değer yoksa nil kullanılır); son ifadedeki tüm değerler ifade listesinin değerlerine dahil edilir.

Aritmetik operatörleri

Lua alışılmış aritmetik işleçleri destekler: toplama, çıkarma, çarpma, bölme, modulo, üs alma ve olumsuzlama.

Tüm işlenenler, tonumber() değerinin sıfırdan farklı olduğu sayılar veya dizeler olduğunda, işlemlerin olağan anlamları vardır.

İşlenenlerden herhangi biri uygun meta yöntem içeren bir tabloda ise, meta yöntem çağrılacaktır.

Operatör İşlev Örnek Metamethod Notlar
+ Ek a + b __add
- Çıkarma a - b __sub
* Çarpma işlemi a * b __mul
/ Bölünme a / b __div sıfıra bölmek bir hata değildir; NaN veya sonsuzluk iade edilecektir
% Modülo a % b __mod a % b == a - math.floor( a / b ) * b olarak tanımlandı
^ Üs a ^ b __pow tamsayı olmayan üslere izin verilir
- Olumsuzluk -a __unm

İlişkisel operatörleri

Lua'daki ilişkisel operatörler ==, ~=, <, >, <= ve ~=. İlişkisel bir operatörün sonucu her zaman bir boole olur.

Eşitlik (==) önce işlenen türlerini karşılaştırır; eğer farklılarsa, sonuç yanlıştır. Sonra değerleri karşılaştırır: nil, boolean, number ve string beklenen şekilde karşılaştırılır. İşlevler, aynı işlev nesnesine başvuruyorsa eşittir; İki farklı anonim işlevi karşılaştırdığı için function() end == function() end false değerini döndürür. Tablolar varsayılan olarak aynı şekilde karşılaştırılır, ancak bu __eq metamethod kullanılarak değiştirilebilir.

Eşitsizlik (~=) eşitliğin kesin olarak olumsuzlanmasıdır.

Düzen operatörleri için, her ikisi de sayı veya her ikisi de dize ise, doğrudan karşılaştırılır. Ardından metametreler kontrol edilir:

  • a < b, __lt kullanılır
  • varsa a <= b, __le kullanılır, veya __lt mevcut ise, öyleyse buna not ( b < a ) eşdeğer kabul edilir
  • a > b, b < a eşdeğer kabul edilir
  • a >= b, b <= a eşdeğer kabul edilir

Gerekli meta yöntemler kullanılamıyorsa, bir hata oluşur.

Mantıksal operatörler

Mantıksal işleçler and, or ve not şeklindedir. Hepsi, nil ve false olduğu ve başka bir şeyin true olduğu standart yorumu kullanır.

and için, sol işlenen yanlış kabul edilirse döndürülür ve ikinci işlenen değerlendirilmez; aksi takdirde ikinci işlenen döndürülür.

or için, sol işlenen doğru kabul edilirse, döndürülür ve ikinci işlenen değerlendirilmez; aksi takdirde ikinci işlenen döndürülür.

not için, sonuç her zaman true veya false olur.

and ve or kısa devre olduğunu unutmayın. Örneğin, foo() or bar(), yalnızca foo() ise bar() ile çağırır. ilk değeri olarak false veya nil değerini döndürür.

Birleştirme operatörü

Birleştirme işleci, a .. b olarak kullanılan iki noktadır. Her iki işlenen de sayı veya dizgiyse, dizgeye dönüştürülür ve birleştirilir. Aksi takdirde, bir __concat metamethod varsa, kullanılır. Aksi takdirde bir hata oluşur.

Lua dizelerinin değişmez olduğunu ve Lua herhangi bir tür "string builder" sağlamadığını unutmayın, bu yüzden tekrar tekrar a = a .. b yapan bir döngü her yineleme için yeni bir dize oluşturun ve sonunda eski dizeleri çöp toplayın. Birçok dizenin birleştirilmesi gerekiyorsa, string.format() kullanmak veya tüm dizeleri bir array içine eklemek ve sonunda table.concat() kullanmak daha hızlı olabilir.

Uzunluk operatörü

Uzunluk operatörü, #a olarak kullanılan #. a bir dize ise, uzunluğu bayt olarak döndürür. a bir array tablosu ise, dizinin uzunluğunu döndürür.

a bir dizi olmayan bir tablo ise, #a herhangi bir N değerini, [N] sıfır ve a[N+1] olacak şekilde döndürebilir nil, daha yüksek dizinlerde nil olmayan değerler olsa bile. Örneğin,

-- Bu bir dizi değildir, çünkü a[3] sıfır ve a[4] değildir
a = { 1, 2, nil, 4 }

-- Bu, 2 veya 4 çıkış alabilir.
-- Ve bu tablo değiştirilmemiş olsa bile değişebilir.
mw.log( #a )

Operatör önceliği

Lua'nın operatör önceliği veya işlem sırası, en yüksekten en düşüğe:

  1. ^
  2. not # - (olumsuzluk)
  3. * / %
  4. + - (çıkarma)
  5. ..
  6. < > <= >= ~= ==
  7. and
  8. or

Öncelik düzeyinde, çoğu ikili işleç sol ilişkiseldir, yani a / b / c, (a / b) / c olarak yorumlanır. Üstelleştirme ve birleştirme doğru çağrıştırıcıdır, yani a ^ b ^ c, a ^ (b ^ c) olarak yorumlanır.

İşlev çağrıları

Lua işlev çağrıları diğer birçok dilde olanlara benzer: bir ad ve ardından parantez içindeki bağımsız değişkenler listesi:

işlev( expression-list )

Lua'daki ifade listelerinde olduğu gibi, listedeki son ifade birden çok bağımsız değişken değeri sağlayabilir.

İşlev, ifade listesinde işlev tanımında bağımsız değişkenlerden daha az değerle çağrılırsa, ek bağımsız değişkenlerin sıfır değeri olur. İfade listesi bağımsız değişkenlerden daha fazla değer içeriyorsa, fazla değerler atılır. Bir fonksiyonun değişken sayıda argüman alması da mümkündür; ayrıntılar için İşlev bildirimlerine bakın.

Lua ayrıca bir işlev dönüş değerinin doğrudan çağrılmasına izin verir, yani func()(). Çağrılacak işlevi belirlemek için değişken erişimden daha karmaşık bir ifade gerekiyorsa, değişken erişim yerine parantez içine alınmış bir ifade kullanılabilir.

Lua, iki genel vaka için sözdizimsel şekere sahiptir. Birincisi, bir tablonun nesne olarak kullanıldığı ve fonksiyonun nesne üzerinde bir yöntem olarak çağrılmasıdır. Sözdizimi

tablo:ad( expression-list )

tam olarak eşdeğerdir

tablo.ad( tablo, expression-list )

İkinci yaygın durum, Lua'nın işleve tek konumsal argüman olarak ad-değer eşlemelerini içeren bir tablo ileterek adlandırılmış bağımsız değişkenler uygulama yöntemidir. Bu durumda, argüman listesindeki parantezler atlanabilir. Bu, işlevin tek bir değişmez dizeden geçirilmesi durumunda da çalışır. Örneğin, çağrılar

func{ arg1 = exp, arg2 = exp }
func"string"

eşittir

func( { arg1 = exp, arg2 = exp } )
func( "string" )

Bunlar birleştirilebilir; aşağıdaki çağrılar eşdeğerdir:

table:name{ arg1 = exp, arg2 = exp }
table.name( table, { arg1 = exp, arg2 = exp } )

İşlev bildirimleri

İşlev bildirimi sözdizimi şöyle görünür:

function ( var-list )
    block
end

var-list içindeki tüm değişkenler işleve yereldir ve değerler function call içindeki ifade listesinden atanır. Ek yerel değişkenler blok içinde bildirilebilir.

İşlev çağrıldığında, var-list ile karşılık gelen yerel değişkenler oluşturulduktan ve değerler atandıktan sonra block içindeki ifadeler yürütülür. return statement ulaşılırsa, bloktan çıkılır ve işlev çağrısı ifadesinin değerleri return deyimi tarafından verilen değerlerdir. Yürütme, bir return ifadesiyle karşılaşmadan işlevin bloğunun sonuna ulaşırsa, işlev çağrısı ifadesinin sonucu sıfır değerine sahiptir.

Lua işlevleri sözcüksel kapanıştır. Ortak bir deyim "private static" değişkenleri işlevin bildirildiği kapsamda yerel olarak bildirmektir. Örneğin,

-- Bu, bağımsız değişkenine bir sayı ekleyen bir işlev döndürür
function makeAdder( n )
    return function( x )
        -- Dış kapsamdaki n değişkeni burada x'e eklenecek
        return x + n
    end
end

local add5 = makeAdder( 5 )
mw.log( add5( 6 ) )
-- baskılar 11

Bir işlev, var-list öğesinde son öğe olarak ... belirtilerek değişken sayıda bağımsız değişkeni kabul ettiği bildirilebilir:

function ( var-list, ... )
    block
end

Blok içinde, varargs ifadesi ... kullanılabilir, sonuç işlev çağrısındaki tüm ekstra değerler olur. Örneğin,

local join = function ( separator, ... )
    -- fazladan bağımsız değişkenleri tablo olarak alın
    local args = { ... }
    -- ekstra bağımsız değişkenler sayısını doğru bir şekilde alın
    local n = select( '#', ... )
    return table.concat( args, separator, 1, n )
end

join( ', ', 'foo', 'bar', 'baz' )
-- "foo, bar, baz" dizesini döndürür

select() işlevi varargs ifadesi ile çalışmak üzere tasarlanmıştır; özellikle, #{ ... } yerine select( '#', ... ) kullanılmalıdır. varargs ifadesindeki değer sayısını saymak için, çünkü { ... } bir array olmayabilir.

Lua, işlev bildirimini ve bir değişkene atamayı birleştirmek için sözdizimsel şeker sağlar; ayrıntılar için İşlev bildirim bildirimlerine bakın.

Bunun işe yaramayacağını unutmayın:

local factorial = function ( n )
    if n <= 2 then
        return n
    else
        return n * factorial( n - 1 )
    end
end

İşlev bildirimi yerel değişken atama deyimi tamamlanmadan önce işlendiğinden, işlev gövdesi içindeki "factorial" bir dış kapsamda bu adın (muhtemelen tanımsız) değişkenini ifade eder. Bu sorun, önce yerel değişkeni bildirip bir sonraki deyimde atayarak veya işlev bildirimi deyimi sözdizimi kullanılarak önlenebilir.

İfadeler

Bir ifade temel yürütme birimidir: bir atama, kontrol yapısı, işlev çağrısı, değişken bildirimi, vb.

Bir yığın isteğe bağlı olarak noktalı virgülle ayrılmış bir ifade dizisidir. Bir yığın temel olarak anonim bir işlevin gövdesi olarak kabul edilir, böylece yerel değişkenleri bildirebilir, bağımsız değişkenler alabilir ve değerleri döndürebilir.

Bir blok da tıpkı bir yığın gibi bir ifade dizisidir. Bir blok, tek bir ifade oluşturmak için sınırlandırılabilir: do block end. Bunlar, yerel değişkenlerin kapsamını sınırlamak veya başka bir bloğun ortasına return veya break eklemek için kullanılabilir.

Atanmalar

variable-list = expression-list

variable-list, virgülle ayrılmış değişkenler listesidir; expression-list, bir veya daha fazla ifadenin virgülle ayrılmış listesidir. Tüm ifadeler herhangi bir atanma yapılmadan önce değerlendir, bu yüzden a, b = b, a, a ve b değerlerini değiştirecek.

Yerel değişken bildirimleri

local variable-list

local variable-list = expression-list

Yerel değişkenler, block veya chunk içinde herhangi bir yerde bildirilebilir. İfade listesi olmayan ilk form değişkenleri bildirir ancak bir değer atamaz, böylece tüm değişkenler değer olarak nil olur. İkinci form, yukarıdaki Atanmalar da açıklandığı gibi yerel değişkenlere değerler atar.

Yerel değişkenin görünürlüğünün, yerel değişken bildiriminden sonraki ifadeyle başladığını unutmayın. Dolayısıyla, local x = x gibi bir bildirim, yerel bir x değişkenini bildirir ve dış kapsamdan x değerini atar. Yerel değişken, yerel değişken bildirimini içeren en içteki bloğun sonuna kadar kapsamda kalır.

Kontrol yapıları

while exp do block end

While ifadesi, bir ifade gerçek bir değer olarak değerlendirildiği sürece bir bloğu tekrarlar.

repeat block until exp

Repeat ifadesi, bir ifade gerçek bir değer olarak değerlendirilene kadar bir bloğu tekrarlar. Blok içinde bildirilen yerel değişkenlere ifadede erişilebilir.

for name = exp1, exp2, exp3 do block end
for name = exp1, exp2 do block end

For döngüsünün ilk biçimi yerel bir değişken bildirir ve her yinelemede exp1 ile exp2 ekleyerek exp3 değerleri için bloğu tekrar eder. exp3 ifadesinin tamamen atlanabileceğini unutmayın; bu durumda 1 kullanılır, ancak nil ve false gibi sayısal olmayan değerlerin bir hata olduğunu unutmayın. Tüm ifadeler döngü başlamadan önce bir kez değerlendirilir.

For döngüsünün bu formu kabaca

do
    local var, limit, step = tonumber( exp1 ), tonumber( exp2 ), tonumber( exp3 )
    if not ( var and limit and step ) then
        error()
    end
    while ( step > 0 and var <= limit ) or ( step <= 0 and var >= limit ) do
        local name = var
        block
        var = var + step
    end
end

ancak var, limit ve step değişkenlerine başka hiçbir yerde erişilemez. name değişkeninin blok için yerel olduğunu unutmayın; döngüden sonraki değeri kullanmak için, döngü dışında bildirilen bir değişkene kopyalanmalıdır.

for var-list in expression-list do block end

For döngüsünün ikinci biçimi iterator işlevleriyle çalışır. İlk formda olduğu gibi, expression-list döngüye başlamadan önce yalnızca bir kez değerlendirilir.

For döngüsünün bu formu kabaca

do
    local func, static, var = expression-list
    while true do
        local var-list = func( static, var )
        var = var1  -- ''var1'', ''var-list'' içindeki ilk değişkendir
        if var == nil then
            break
        end
        block
    end
end

ancak func, static ve var değişkenlerine başka hiçbir yerde erişilemez. var-list içindeki değişkenlerin blok için yerel olduğunu unutmayın; döngüden sonra kullanmak için, döngü dışında bildirilen değişkenlere kopyalanmalıdır.

Genellikle expression-list üç değeri döndüren tek bir işlev çağrısıdır. Yineleyici işlevi yalnızca içine geçirilen parametrelere bağlı olacak şekilde yazılabilirse, bu en verimli yöntemdir. Değilse, Lua'da programlama bir tablonun statik değişken olarak döndürülmesine ve her yinelemede üyelerinin güncellenmesine bir kapatmanın tercih edilmesini önerir.

if exp1 then block1 elseif exp2 then block2 else block3 end

exp1 true değerini döndürürse block1 öğesini, aksi takdirde exp2 true değerini döndürürse block2 öğesini, aksi takdirde block3 öğesini yürütür. else block3 kısmı atlanabilir ve elseif exp2 then block2 kısmı gerektiğinde tekrarlanabilir veya atlanabilir.

return expression-list

Return ifadesi, bir işlevden veya chunk (yalnızca bir işlevdir) değer döndürmek için kullanılır. Expression-list, sıfır veya daha fazla ifadenin virgülle ayrılmış listesidir.

Lua kuyruk özyineleme uygular: expression-list bir işlev çağrısı olan tam olarak bir ifadeden oluşuyorsa, geçerli yığın çerçevesi o işleve çağrı için yeniden kullanılır. Bunun çağrı yığını ile ilgili işlevler için bir anlamı vardır, getfenv() ve debug.traceback() gibidir.

Return deyimi, block içindeki son ifade olmalıdır. Herhangi bir nedenle bir bloğun ortasında bir dönüş gerekiyorsa, açık bir do return end bloğu kullanılabilir.

break

Break ifadesi, döngüden sonraki ifadeye atlayarak bir süre, tekrar veya döngü için yürütmeyi sonlandırmak için kullanılır.

Break ifadesi, block içindeki son ifade olmalıdır. Herhangi bir nedenden ötürü bir bloğun ortasında bir ayırtma gerekiyorsa, açık bir do break end bloğu kullanılabilir.

İfadeler olarak işlev çağrıları

Bir işlev çağrısı bir ifade olarak kullanılabilir; bu durumda, işlev yalnızca sahip olabileceği herhangi bir yan etki için çağrılır (örneğin mw.log() günlük değerleri) ve herhangi bir dönüş değeri atılır.

İşlev bildirim ifadeleri

Lua, bir işlevi bildirmek ve bir değişkene daha doğal atamak için sözdizimsel şeker sağlar. Aşağıdaki bildirim çiftleri eşdeğerdir

-- Temel beyan
function func( var-list ) block end
func = function ( var-list ) block end
-- Yerel işlev
local function func( var-list ) block end
local func; func = function ( var-list ) block end
-- Tablodaki alan olarak işlev
function table.func( var-list ) block end
table.func = function ( var-list ) block end
-- Tabloda yöntem olarak işlev
function table:func( var-list ) block end
table.func = function ( self, var-list ) block end

Burada iki nokta üst üste işareti, bağımsız değişkenler listesinin başına "self" adlı örtük bir bağımsız değişken ekleyerek işlev çağrıları için iki nokta üst üste işareti ile paralellik gösterir.

Hata işleme

error() ve assert() işlevleri kullanılarak hatalar "atılabilir". Hataları "yakalamak" için pcall() veya xpcall () kullanın. Bazı dahili Scribunto hatalarının Lua kodunda yakalanamayacağını unutmayın.

Çöp toplama

Lua otomatik bellek yönetimi gerçekleştirir. Bu, yeni nesneler için bellek ayırma veya nesneler artık gerekli olmadığında boşaltma konusunda endişelenmeniz gerektiği anlamına gelir. Lua, zaman zaman tüm ölü nesneleri (yani, Lua'dan artık erişilemeyen nesneleri) ve yalnızca zayıf kaynakça aracılığıyla erişilebilen nesneleri toplamak için zaman zaman bir çöp toplayıcı çalıştırarak belleği otomatik olarak yönetir. Lua tarafından kullanılan tüm bellek otomatik yönetime tabidir: tablolar, işlevler, dizeler vb.

Çöp toplama otomatik olarak gerçekleşir ve Scribunto içinden yapılandırılamaz.

Standart kütüphaneler

Standart Lua kütüphaneleri, Lua'ya temel hizmetler ve kritik performans fonksiyonları sağlar. Burada standart kütüphanelerin sadece Scribunto'da bulunan kısımları belgelenmiştir.

Temel işlevler

_G

Bu değişken, geçerli genel değişken tablosuna bir referans tutar; foo genel değişkenine de _G.foo olarak erişilebilir. Ancak, _G kendisi hakkında özel bir şey olmadığını unutmayın; diğer değişkenlerle aynı şekilde yeniden atanabilir:

foo = 1
mw.log( foo ) -- "1" kaydediyor
_G.foo = 2
mw.log( foo ) -- "2" kaydediyor
_G = {}       -- _G artık genel değişken tablosunu göstermiyor
_G.foo = 3
mw.log( foo ) -- hala "2" kaydediyor

Küresel değişken tablosu, diğer tablolar gibi kullanılabilir. Örneğin,

-- Adı bir değişkende depolanan bir işlevi çağırın
_G[var]()

-- Tüm küresel değişkenlerin adlarını ve dizgi değerlerini günlüğe kaydet
for k, v in pairs( _G ) do
   mw.log( k, v )
end

-- Yeni küresel değişkenlerin oluşturulmasını günlüğe kaydet
setmetatable( _G, {
    __newindex = function ( t, k, v )
         mw.log( "Creation of new global variable '" .. k .. "'" )
         rawset( t, k, v )
    end
} )

_VERSION

Lua'nın çalışan sürümünü içeren bir dize, ör. "Lua 5.1".

assert

assert( v, message, ... )

v sıfır veya yanlışsa bir hata verir. Bu durumda, hatanın metni olarak message kullanılır: nil (veya belirtilmemişse), metin "onaylama başarısız!"; bir dize veya sayı varsa, metin bu değerdir; aksi taktirde kendi başına bir hata ortaya çıkar.

v başka bir değerse, assert v ve message dahil tüm bağımsız değişkenleri döndürür.

Lua'da biraz yaygın bir deyim, bir işlevin normal çalışmada "true" değerini döndürmesi ve başarısızlık durumunda ilk değer olarak nil veya false ve ikinci değer olarak bir hata mesajı döndürmesidir. Daha sonra kolay hata kontrolü çağrı assert çağrısına sarılarak yapılabilir:

-- Bu hataları kontrol etmez
local result1, result2, etc = func( ... )

-- Bu aynı şekilde çalışır, ancak hataları kontrol eder
local result1, result2, etc = assert( func( ... ) )

error

error( message, level )

message metniyle hata verir.

error normalde hatanın yeri hakkında bazı bilgiler ekler. level 1 veya atlanmışsa, bu bilgi error çağrısının kendisidir; 2, hata adı verilen işlevin çağrısının yerini kullanır; ve bunun gibi. 0 geçilmesi konum bilgilerinin dahil edilmesini atlar.

getfenv

getfenv( f )

Motor yapılandırmasındaki allowEnvFuncs değerine bağlı olarak bu işlevin kullanılamayabileceğini unutmayın.

f ile belirtildiği gibi bir ortam (genel değişken tablosu) döndürür:

  • 1, nil veya atlanmışsa, getfenv çağıran işlevin ortamını döndürür. Genellikle bu _G ile aynı olacaktır.
  • Tamsayılar 2-10, çağrı yığınındaki fonksiyonların ortamını döndürür. Örneğin, 2, geçerli işlev olarak adlandırılan işlevin ortamını döndürür, 3 bu işlevi çağıran işlevin ortamını döndürür, vb. değer yığındaki işlev çağrılarının sayısından daha yüksekse veya hedeflenen yığın düzeyi bir kuyruk çağrısıyla döndürüldüğünde bir hata ortaya çıkar.
  • Bir işlevin iletilmesi, o işlev çağrıldığında kullanılacak ortamı döndürür.

Tüm standart kütüphane işlevleri ve Scribunto kütüphane işlevleri tarafından kullanılan ortamlar korunur. Bu ortamlara getfenv kullanarak erişmeye çalışmak bunun yerine sıfır döndürür.

getmetatable

getmetatable( table )

table öğesinin metatable değerini döndürür. Başka herhangi bir tür sıfır döndürür.

Metatable'ın __metatable alanı varsa, gerçek metatable yerine bu değer döndürülür.

ipairs

ipairs( t )

Üç değer döndürür: bir yineleyici işlevi, t ve 0 tablosu. Bu, for yineleyici formunda kullanılmak üzere tasarlanmıştır:

for i, v in ipairs( t ) do
    -- process each index-value pair
end

Bu, çiftler ( 1, t[1] ), ( 2, t[2] ) üzerinde tekrar eder ve bu şekilde, t[i] sıfır olduğunda durur.

__ipairs metamethod sağlayarak standart davranış geçersiz kılınabilir. Bu meta yöntem mevcutsa, ipairs çağrısı bunun yerine __ipairs( t ) ile döndürülen üç değeri döndürür.

next

next( table, key )

Bu, tablodaki anahtarların üzerinden yineleme yapılmasını sağlar. key sıfır veya belirtilmemişse, tablodaki "first" anahtarı ve değerini döndürür; aksi takdirde, "next" anahtarı ve değerini döndürür. Başka anahtar yoksa, nil değerini döndürür. next( t ) == nil ifadesini kullanarak bir tablonun boş olup olmadığını kontrol etmek mümkündür.

Sayısal dizinleri olan tablolar için bile anahtarların döndürülme sırasının belirtilmediğini unutmayın. Bir tabloyu sayısal sırada hareket ettirmek için bir numerical for veya ipairs kullanın.

Geçiş için sonraki öğeyi kullanırken, var olmayan herhangi bir anahtara bir değer atandığında davranış tanımsızdır. Mevcut bir alana yeni bir değer (nil dahil) atanmasına izin verilir.

pairs

pairs( t )

Üç değer döndürür: bir yineleyici işlevi (next veya benzer şekilde), t tablosu ve nil. Bu, yineleyici formunda kullanım için tasarlanmıştır:

for k, v in pairs( t ) do
    -- her bir anahtar/değer çiftini işle
end

Bu, next gibi anahtar/değer çiftlerini t olarak yineleyecektir; tarama sırasında tabloyu değiştirmeyle ilgili kısıtlamalar için next belgelerine bakın.

__pairs metamethod sağlanarak standart davranış geçersiz kılınabilir. Bu meta yöntem mevcutsa, çiftlere çağrı, bunun yerine __pairs( t ) ile döndürülen üç değeri döndürür.

pcall

pcall( f, ... )

protected mode verilen bağımsız değişkenlerle f işlevini çağırır. Bu, f çağrısı sırasında bir hata ortaya çıkarsa, pcall işlevinin false döndüreceği ve hata mesajının yükseltileceği anlamına gelir. Hata oluşmazsa, pcall true değerini ve çağrı tarafından döndürülen tüm değerleri döndürür.

pseudocode içinde, pcall şu şekilde tanımlanabilir:

function pcall( f, ... )
    try
        return true, f( ... )
    catch ( message )
        return false, message
    end
end

rawequal

rawequal( a, b )

Bu, __eq metamethod yok sayması dışında a == b ile eşdeğerdir.

rawget

rawget( table, k )

Bu, __index metamethod yok sayması dışında table[k] ile eşdeğerdir.

rawset

rawset( table, k, v )

Bu, __newindex metamethod yok sayması dışında table[k] = v ile eşdeğerdir.

select

select( index, ... )

index bir sayı ise, bu dizinden sonraki tüm argümanları ... olarak döndürür. index '#' dizgiyse, argüman sayısını ... olarak döndürür.

Başka bir deyişle, select kabaca aşağıdaki gibi bir şeydir, ancak ... nil değerleri içerdiğinde bile düzgün çalışacaktır (nils sorunu için # ve unpack belgelerine bakın).

function select( index, ... )
    local t = { ... }
    if index == '#' then
        return #t
    else
        return unpack( t, index )
    end
end

setmetatable

setmetatable( table, metatable )

table öğesinin metatable değerini ayarlar. metatable sıfır olabilir, ancak açıkça belirtilmelidir.

Geçerli metatable'ın __metatable alanı varsa, setmetatable bir hata atar.

tonumber

tonumber( value, base )

value bir sayıya dönüştürmeyi dener. Zaten bir sayı veya sayıya dönüştürülebilecek bir dize ise, tonumber bu sayıyı döndürür; aksi halde sıfır döndürür.

İsteğe bağlı base (varsayılan 10), sayıyı yorumlayacak tabanı belirtir. Baz, 2 ile 36 arasında (tam dahil) herhangi bir tam sayı olabilir. 10'un üzerindeki bazlarda, 'A' harfi (büyük ya da küçük harf) 10'u temsil eder, 'B' 11'i temsil eder ve 'Z' 35'i temsil eder.

Temel 10'da, değerin ondalık bir bölümü olabilir, E notasyonu ile ifade edilebilir ve temel 16'yı belirtmek için önde gelen "0x" olabilir. Diğer temellerde yalnızca işaretsiz tamsayılar kabul edilir.

tostring

tostring( value )

value değerini bir dizeye dönüştürür. Her türün nasıl dönüştürüldüğüne ilişkin ayrıntılar için yukarıdaki Veri türleri bölümüne bakın.

Tablolar için standart davranış, __tostring metamethod sağlanarak geçersiz kılınabilir. Bu meta yöntem mevcutsa, tostring çağrısı bunun yerine __tostring( value ) ile döndürülen tek değeri döndürür.

type

type( value )

value türünü dize olarak döndürür:"nil", "number", "string", "boolean", "table" veya "function".

unpack

unpack( table, i, j )

Manüel olarak yazılırsa table[i], table[i+1], ···, table[j] gibi bir değer verilen tablodan değerleri döndürür. Nil veya belirtilmezse, i varsayılan olarak 1 ve j varsayılan olarak #table olur.

table bir array değilse ve j sıfır veya belirtilmemişse sonuçların belirleyici olmadığını unutmayın; ayrıntılar için Uzunluk operatörüne bakın.

xpcall

xpcall( f, errhandler )

Hata mesajı iade edilmeden önce errhandler işlevine iletilmesi dışında pcall gibidir.

pseudocode içinde, xpcall şu şekilde tanımlanabilir:

function xpcall( f, errhandler )
    try
        return true, f()
    catch ( message )
        message = errhandler( message )
        return false, message
    end
end

Kitaplıkta hata ayıklama

debug.traceback

debug.traceback( message, level )

Çağrı yığınının izini taşıyan bir dize döndürür. Geri izlemenin başına isteğe bağlı bir ileti dizesi eklenir. İsteğe bağlı bir seviye numarası, izlemeyi başlatmak için hangi yığın seviyesinde başlatılacağını bildirir.

Matematik kütüphanesi

math.abs

math.abs( x )

x mutlak değerini döndürür.

math.acos

math.acos( x )

x arc kosinüsünü (radyan cinsinden verilir) döndürür.

math.asin

math.asin( x )

x arc sinüsünü döndürür (radyan cinsinden verilir).

math.atan

math.atan( x )

x arc tanjantını verir (radyan cinsinden verilir).

math.atan2

math.atan2( y, x )

Sonucun çeyreğini bulmak için her iki parametrenin işaretlerini kullanarak y/x (radyan cinsinden verilen) arc tanjantını döndürür.

math.ceil

math.ceil( x )

x fazladan büyük veya ona eşit olan en küçük tamsayıyı döndürür.

math.cos

math.cos( x )

x kosinüsü verir (radyan cinsinden verilir).

math.cosh

math.cosh( x )

x hiperbolik kosinüsü verir.

math.deg

math.deg( x )

Derece olarak x (radyan cinsinden verilen) açısını döndürür.

math.exp

math.exp( x )

  değerini döndürür.

math.floor

math.floor( x )

x ile küçük veya ona eşit olan en büyük tamsayıyı döndürür.

math.fmod

math.fmod( x, y )

Bölgeyi sıfıra doğru yuvarlayan x bölünmesinin geri kalanını y olarak döndürür. Örneğin, math.fmod( 10, 3 ), 1 verir.

math.frexp

math.frexp( x )

m ve e olmak üzere iki değer döndürür:

  • x sonlu ve sıfırdan farklıysa:  , e bir tamsayıdır ve m mutlak değeri   aralığındadır
  • ½6 sıfır ise: m ve e, 0
  • x NaN veya sonsuzsa: m, x ve e belirtilmedi

math.huge

Pozitif sonsuzluğu temsil eden değer; herhangi bir sayısal değere eşit veya daha büyük.

math.ldexp

math.ldexp( m, e )

  döndürür (e tam sayı olmalıdır).

math.log

math.log( x )

x doğal logaritmayı döndürür.

math.log10

math.log10( x )

x taban-10 logaritmasını verir.

math.max

math.max( x, ... )

Bağımsız değişkenleri arasında maksimum değeri döndürür.

NaN'lerle davranış belirtilmedi. Mevcut uygulama ile, eğer x NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.

math.min

math.min( x, ... )

Bağımsız değişkenleri arasında minimum değeri döndürür.

NaN'lerle davranış belirtilmedi. Mevcut uygulama ile, eğer x NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.

math.modf

math.modf( x )

İki sayıyı döndürür, x ayrılmaz parçası ve x kesirli kısmı. Örneğin, math.modf( 1.25 ), 1, 0.25 verir.

math.pi

  değeri.

math.pow

math.pow( x, y )

x^y ile eşdeğerdir.

math.rad

math.rad( x )

Radyan cinsinden x (derece olarak verilir) açısını döndürür.

math.random

math.random( m, n )

Yalancı rastgele bir sayı döndürür.

m ve n bağımsız değişkenleri atlanabilir, ancak belirtilirse tamsayılara dönüştürülebilir olmalıdır.

  • Bağımsız değişken olmadan   aralığında gerçek bir sayı döndürür
  • Bir Bağımsız değişkenle,   aralığında bir tamsayı döndürür
  • İki bağımsız değişkenle,   aralığında bir tamsayı döndürür

math.randomseed

math.randomseed( x )

Sözde rastgele üreteç için x seed olarak ayarlar.

Aynı çekirdeği kullanmanın math.random değerinin aynı sayı dizisini vermesine neden olacağını unutmayın.

math.sin

math.sin( x )

x değerinde sinyali döndürür (radyan cinsinden verilir).

math.sinh

math.sinh( x )

x hiperbolik sinüsü döndürür.

math.sqrt

math.sqrt( x )

x ile karekökü döndürür. x^0.5 ile eşdeğerdir.

math.tan

math.tan( x )

x tanjantını döndürür (radyan cinsinden verilir).

math.tanh

math.tanh( x )

x hiperbolik tanjantını döndürür.

İşletim sistemi kitaplığı

os.clock

os.clock()

Program tarafından kullanılan CPU süresinin saniye cinsinden miktarının yaklaşık değerini döndürür.

os.date

os.date( format, time )

Dil kütüphanesinin formatDate daha kapsamlı tarih biçimlendirmesi için kullanılabilir

format göre biçimlendirilmiş bir dize veya tarih ve saat içeren bir tablo döndürür. Biçim atlanırsa veya sıfırsa, "%c" kullanılır.

time verilirse, biçimlendirilecek zamandır ( os.time() bakın). Aksi takdirde geçerli saat kullanılır.

format '!' ile başlıyorsa, tarih sunucunun yerel saati yerine UTC olarak biçimlendirilir. Bu isteğe bağlı karakterden sonra biçim "*t" dizgiyse, tarih aşağıdaki alanları içeren bir tablo döndürür:

  • year (tam)
  • month (1–12)
  • day (1–31)
  • hour (0–23)
  • min (0–59)
  • sec (0–60)
  • wday (hafta içi, Pazar 1)
  • yday (yılın günü)
  • isdst (gün ışığından yararlanan işaret, bir boole; bilgi mevcut değilse mevcut olmayabilir)

Biçim "*t" değilse, tarih tarihi C işlevi strftime ile aynı kurallara göre biçimlendirilmiş bir dize olarak döndürür.

os.difftime

os.difftime( t2, t1 )

t1 üzerinden t2 ile saniye sayısını döndürür.

os.time

os.time( table )

Geçerli saati temsil eden bir sayı döndürür.

Bağımsız değişken olmadan çağrıldığında geçerli saati döndürür. Bir tablo iletilirse, tabloda kodlanan süre ayrıştırılır. Tabloda "year", "month" ve "day" alanları bulunmalı ve ayrıca "hour" (varsayılan 12), "min" (varsayılan 0), "sec" (varsayılan 0) ve "isdst" dahil edebilirler.

Paket kütüphanesi

require

require( modulename )

Belirtilen modülü yükler.

İlk olarak, modülün zaten yüklü olup olmadığını görmek için package.loaded[modulename] içine bakar. Öyleyse, package.loaded[modulename] değerini döndürür.

Aksi takdirde, modül için bir yükleyici bulmaya çalışmak için package.loaders dizisindeki her yükleyiciyi çağırır. Bir yükleyici bulunursa, o yükleyici çağrılır. Yükleyici tarafından döndürülen değer package.loaded[modulename] içine kaydedilir ve döndürülür.

Mevcut yükleyiciler hakkında bilgi için package.loaders belgelerine bakın.

Örneğin, aşağıdakileri içeren bir "Module:Giving" modülünüz varsa:

local p = {}

p.someDataValue = 'Merhaba!'

return p

Bunu, aşağıdaki gibi bir kodla başka bir modüle yükleyebilirsiniz:

local giving = require( "Module:Giving" )

local value = giving.someDataValue -- değer şimdi 'Merhaba!'

package.loaded

Bu tabloda yüklü modüller bulunur. Anahtarlar modül adlarıdır ve değerler modül yüklendiğinde döndürülen değerlerdir.

package.loaders

Bu tablo, modülleri yüklerken kullanılacak arama işlevleri dizisini içerir. Her arama işlevi, yüklenecek modülün adı olan tek bir argümanla çağrılır. Modül bulunursa, araştırmacı modülü gerçekten yükleyecek bir işlev döndürmeli ve require tarafından döndürülecek değeri döndürmelidir. Aksi takdirde sıfır döndürmelidir.

Scribunto iki araştırmacı sunar:

  1. Yükleyici işlevi için package.preload[modulename]
  2. Modül adı için Scribunto tarafından sağlanan modüllere bakın ve başarısız olursa Modül: ad boşluğuna bakın. "Modül:" öneki sağlanmalıdır.

Standart Lua yükleyicilerin dahil olmadığını unutmayın.

package.preload

Bu tablo, package.loaders içine dahil edilen ilk araştırmacı Scribunto tarafından kullanılan yükleyici işlevlerini içerir.

package.seeall

package.seeall( table )

table için __index metamethod değerini _G olarak ayarlar.

Dize kütüphanesi

Tüm dize işlevlerinde, ilk karakter C, PHP ve JavaScript'teki gibi 0 konumunda değil, 1. konumdadır. Dizinler negatif olabilir, bu durumda dizenin sonundan sayarlar: -1 konumu dizgideki son karakter, -2 ikinci sonuncudur, vb.

Uyarı: Dize kitaplığı bir baytlık karakter kodlamaları olduğunu varsayar. Unicode karakterleri işleyemez. Unicode dizelerinde çalışmak için Scribunto Ustring kütüphanesinde ilgili yöntemleri kullanın.

string.byte

string.byte( s, i, j )

Dize bir bayt dizisi olarak kabul edilirse, s[i], s[i+1], ···, s[j] için bayt değerlerini döndürür. s[i] için varsayılan değer 1'dir; j için varsayılan değer i şeklindedir. mw.ustring.byte() ile aynı.

string.char

string.char( ... )

Sıfır veya daha fazla tam sayı alır. Her karakterin karşılık gelen bağımsız değişkenine eşit bayt değerine sahip olduğu, bağımsız değişken sayısına eşit bir dize döndürür.

local value = string.char( 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21 ) --değer şimdi 'Merhaba!'

Bayt değerleri yerine Unicode kod noktalarını kullanan benzer bir işlev için mw.ustring.char() sayfasına bakın.

string.find

string.find( s, pattern, init, plain )

s dizesindeki pattern ile ilk eşleşmeyi arar. Bir eşleşme bulursa, find, bu oluşumun başladığı ve bittiği s içindeki ofsetleri döndürür; aksi halde sıfır döndürür. Desenin yakalamaları varsa, başarılı bir eşleşmede yakalanan değerler de iki endeksten sonra döndürülür.

Üçüncü, isteğe bağlı sayısal argüman init aramanın nerede başlatılacağını belirtir; varsayılan değeri 1'dir ve negatif olabilir. Dördüncü, isteğe bağlı plain bağımsız değişkeni olarak true değeri, desen eşleştirme özelliklerini kapatır, bu nedenle işlev, pattern karakter bulunmayan düz bir "find substring" işlemini gerçekleştirecek "magic" olarak kabul edilir.

plain verilirse, init de verilmesi gerektiğini unutmayın.

Ustring patterns de anlatıldığı gibi genişletilmiş benzer bir işlev ve bayt yerine init ofsetinin karakterlerde olduğu mw.ustring.find() öğesine bakın. .

string.format

string.format( formatstring, ... )

İlk bağımsız değişkeninde (bir dize olması gerekir) verilen açıklamanın ardından değişken bağımsız değişken sayısının biçimlendirilmiş bir sürümünü döndürür.

Biçim dizisi printf biçim belirleyicilerinin sınırlı bir alt kümesini kullanır:

  • Tanınan işaretler '-', '+', , '#' ve '0' şeklindedir.
  • 99'a kadar tamsayı alan genişlikleri desteklenir. '*' desteklenmiyor.
  • 99'a kadar tamsayı kesinlikleri desteklenir. '*' desteklenmiyor.
  • Uzunluk değiştiricileri desteklenmez.
  • Tanınan dönüşüm anahtarları 'c', 'd', 'i', 'o', 'u', 'x', 'X', 'e', 'E', 'f', 'g', 'G ',' s ', '%' ve standart olmayan 'q'.
  • Konum anahtarları (ör. "%2$s") desteklenmez.

'q' dönüşüm belirteci 's' gibidir, ancak dizeyi Lua yorumlayıcısı tarafından güvenli bir şekilde geri okunmaya uygun bir biçimde biçimlendirir: dize çift tırnak işaretleri ve tüm çift tırnak işaretleri, yeni satırlar, katıştırılmış sıfırlar ve ters eğik çizgiler arasında yazılır dize yazıldığında doğru bir şekilde kaçar.

Dizeler ve sayılar arasındaki Data types dönüştürme; diğer türler otomatik olarak dizgilere dönüştürülmez. NUL karakterleri (bayt değeri 0) içeren dizeler düzgün işlenmiyor.

mw.ustring.format() ile aynı.

string.gmatch

string.gmatch( s, pattern )

Her çağrıldığında, pattern dizesinden s dizesinden sonraki yakalamaları döndüren bir yineleyici işlevi döndürür. pattern hiçbir yakalama belirtmezse, her aramada tüm eşleşme üretilir.

Bu işlev için, desenin başlangıcında bir '^' sihirli değildir, çünkü bu yinelemeyi önler. Değişmez bir karakter olarak ele alınır.

Desenin Ustring patterns bölümünde açıklandığı gibi genişletildiği benzer bir işlev için mw.ustring.gmatch() içinde bakın.

string.gsub

string.gsub( s, pattern, repl, n )

pattern tüm örneklerinin (veya varsa ilk n) bulunduğu bir s kopyasını döndürür, yerine repl ile belirtilen ve bir dize, bir tablo veya bir işlev olabilecek yeni bir dize yerleştirildi. gsub ayrıca ikinci değeri olarak gerçekleşen toplam eşleşme sayısını döndürür.

repl bir dize ise, değeri değiştirme için kullanılır. % karakteri bir kaçış karakteri olarak çalışır: %n formunun repl içindeki herhangi bir sıra, 1 ile 9 arasında n olduğunda, n-th yakalanan alt dize değeri anlamına gelir. %0 dizisi tüm eşleşmeyi, %% dizisi ise tek bir % dizisini temsil eder.

repl bir tablo ise, tablo ilk eşleme anahtar olarak kullanılarak her eşleşme için sorgulanır; kalıp yakalama belirtmezse, tüm eşleşme anahtar olarak kullanılır.

repl bir işlevse, bu işlev her eşleşme gerçekleştiğinde çağrılır ve yakalanan tüm alt dizeler sırasıyla bağımsız değişken olarak iletilir; kalıp hiçbir yakalama belirtmezse, tüm eşleşme tek bir bağımsız değişken olarak geçirilir.

Tablo sorgusu veya işlev çağrısı tarafından döndürülen değer bir dize veya sayı ise, o zaman yeni dize olarak kullanılır; aksi takdirde, false veya nil ise, o zaman değiştirme olmaz (yani, orijinal eşleşme dizede tutulur).

Desenin Ustring patterns bölümünde açıklandığı gibi genişletildiği benzer bir işlev için mw.ustring.gsub() içinde bakın.

string.len

string.len( s )

Dizenin uzunluğunu bayt cinsinden döndürür. ASCII NUL karakterleri tarafından karıştırılmaz. # ile eşdeğerdir.

Bayt yerine Unicode kod noktalarını kullanan benzer bir işlev için mw.ustring.len() bakın.

string.lower

string.lower( s )

Tüm ASCII büyük harfleri küçük harfe dönüştürülmüş olarak bu dizenin bir kopyasını döndürür. Diğer tüm karakterler değişmeden kalır.

Unicode'da büyük harfli ve küçük harfli tanımlara sahip tüm karakterlerin dönüştürüldüğü benzer bir işlev için mw.ustring.lower() bakın.

string.match

string.match( s, pattern, init )

Dizedeki pattern ile ilk eşleşmeyi arar. Birini bulursa, match desendeki yakalamaları döndürür; aksi halde sıfır döndürür. pattern hiçbir yakalama belirtmezse, tüm eşleşme döndürülür.

Üçüncü, isteğe bağlı sayısal argüman init aramanın nerede başlatılacağını belirtir; varsayılan değeri 1'dir ve negatif olabilir.

Desenin Ustring patterns ve init göreli konumunda açıklandığı gibi uzatıldığı benzer bir işlev için bayt yerine karakterler mw.ustring.match() öğesine bakın.

string.rep

string.rep( s, n )

s dizesinin n kopyasının birleşimi olan bir dize döndürür. mw.ustring.rep() ile aynı.

string.reverse

string.reverse( s )

s tersine çevrilmiş (bytewise) bir dize döndürür.

string.sub

string.sub( s, i, j )

i ile başlayan ve j kadar devam eden s alt dizesini döndürür; i ve j negatif olabilir. j sıfır veya atlanmışsa, dizenin sonuna kadar devam eder.

Lua'daki bir dizenin index 1 ile başladığını unutmayın. Ayrıca, bu işlevi kullanırken, her iki uçtaki indeksler kapsayıcıdır.

Özellikle string.sub(s,1,j) çağrısı, j uzunluğunda s önekini ve string.sub(s, -i) ise i uzunluğunda s sonekini döndürür.

Ofsetlerin bayt yerine karakter olduğu benzer bir işlev için mw.ustring.sub() bakın.

string.upper

string.upper( s )

Tüm ASCII küçük harflerini büyük harfe değiştirmiş olarak bu dizenin bir kopyasını döndürür. Diğer tüm karakterler değişmeden kalır.

Unicode'da küçük harfli büyük harfe kadar tüm karakterlerin dönüştürüldüğü benzer bir işlev için mw.ustring.upper() bakın.

Desenler

Lua'nın kalıplarının düzenli ifadeler ile benzer olduğunu, ancak aynı olmadığını unutmayın. Özellikle, normal ifadeler ve PCRE arasındaki aşağıdaki farklılıklara dikkat edin:

  • Alıntı karakteri ters eğik çizgi (\) değil yüzde (%) şeklindedir.
  • Nokta (.) her zaman yeni satırlar dahil tüm karakterlerle eşleşir.
  • Büyük/küçük harfe duyarlı olmayan mod.
  • Alternatif yok (| operatörü).
  • Niceleyiciler (*, +, ? ve -) yalnızca tek tek karakterlere veya karakter sınıflarına uygulanabilir, grupları yakalamak için değil.
  • Açgözlü olmayan tek nicelik belirteci, PCRE'nin *? nicelik anahtarına eşdeğer olan -.
  • Genelleştirilmiş sonlu nicelik belirteci yok (örn. PCRE'de {n,m} nicelik belirteci).
  • Sadece sıfır genişlikli iddialar ^, $ ve %f[set] "sınır" kalıbıdır; PCRE'nin \b veya (?=···) gibi iddialar mevcut değildir.
  • Patterns themselves do not recognize character escapes such as '\ddd'. Ancak, desenler strings olduğundan, bu tür çıkışlar, desen dizesini oluşturmak için kullanılan dize değişmezlerinde kullanılabilir.

Ayrıca, bir desenin gömülü sıfır bayt içeremeyeceğini unutmayın (ASCII NUL, "\0"). Bunun yerine %z kullanın.

Ayrıca Unicode karakterleri kullanarak benzer bir desen eşleme şeması için Ustring patterns bakın.

Karakter sınıfı

Bir karakter kümesini temsil etmek için karakter sınıfı kullanılır. Bir karakter sınıfının tanımlanmasında aşağıdaki kombinasyonlara izin verilir:

  • x: (burada x ^$()%.[]*+-? sihirli karakterlerinden biri değil) "x" karakterinin kendisini temsil eder.
  • .: (bir nokta) tüm karakterleri temsil eder.
  • %a: tüm ASCII harflerini temsil eder.
  • %c: tüm ASCII kontrol karakterlerini temsil eder.
  • %d: tüm basamakları temsil eder.
  • %l: tüm ASCII küçük harflerini temsil eder.
  • %p: tüm noktalama işaretlerini temsil eder.
  • %s: tüm ASCII boşluk karakterlerini temsil eder.
  • %u: tüm ASCII büyük harflerini temsil eder.
  • %w: tüm ASCII alfasayısal karakterleri temsil eder.
  • %x: tüm onaltılık basamakları temsil eder.
  • %z: sıfır bayt olan ASCII NUL'u temsil eder.
  • %A: Tüm karakterler %a içinde değil.
  • %C: Tüm karakterler %c içinde değil.
  • %D: Tüm karakterler %d içinde değil.
  • %L: Tüm karakterler %l içinde değil.
  • %P: Tüm karakterler %p içinde değil.
  • %S: Tüm karakterler %s içinde değil.
  • %U: Tüm karakterler %u içinde değil.
  • %W: Tüm karakterler %w içinde değil.
  • %X: Tüm karakterler %x içinde değil.
  • %Z: Tüm karakterler %z içinde değil.
  • %x: (burada x alfasayısal olmayan herhangi bir karakterdir) "x" karakterini temsil eder. Sihirli karakterlerden kaçmanın standart yolu budur. Herhangi bir noktalama işaretinden (sihir olmayan bile olsa) önce bir kalıpta kendisini temsil etmek için kullanıldığında '%' ile başlayabilir.
  • [set]: "set" içindeki tüm karakterlerin birleşimi olan sınıfı temsil eder. Aralığın bitiş karakterlerini bir '-' ile ayırarak bir dizi karakter belirtilebilir. Yukarıda açıklanan tüm % x sınıfları set içinde bileşen olarak da kullanılabilir. Set deki diğer tüm karakterler kendilerini temsil eder. Örneğin, [%w_] (veya [_%w]) tüm alfasayısal karakterleri ve alt çizgiyi temsil eder, [0-7] sekizli rakamlar ve [0-7%l%-] sekizli rakamları ve küçük harfleri artı '-' karakterini temsil eder. Aralıklarla sınıflar arasındaki etkileşim tanımlanmamıştır. Bu nedenle, [%a-z] veya [a-%%] gibi kalıpların hiçbir anlamı yoktur.
  • [^set]: set ifadesini gösterir, burada set yukarıdaki gibi yorumlanır.
Desen öğeleri

Bir desen öğesi şunlar olabilir

  • sınıftaki herhangi bir karakterle eşleşen tek bir karakter sınıfı;
  • tek bir karakter sınıfı ve onu takip eden '*'. Bu karakter, sınıftaki 0 veya daha fazla karakter tekrarıyla eşleşir. Bu tekrar öğeleri her zaman mümkün olan en uzun sıra ile eşleşecektir;
  • tek bir karakter sınıfı ve ardından '+' ifadesi gelir; bu sınıftaki 1 veya daha fazla karakter tekrarı ile eşleşir. Bu tekrar öğeleri her zaman mümkün olan en uzun sıra ile eşleşecektir;
  • tek bir karakter sınıfı ve onu takip eden '-'. Bu karakter, sınıftaki 0 veya daha fazla karakter tekrarıyla eşleşir. '*' dan farklı olarak, bu tekrar öğeleri her zaman en kısa olası diziyle eşleşir;
  • sınıftaki bir karakterin 0 veya 1 oluşumuyla eşleşen tek bir karakter sınıfı ve ardından '?';
  • %n, 1 ile 9 arasında n için; bu öğe, n - yakalanan dizeye eşit bir alt dizeyle eşleşir (aşağıya bakın);
  • %bxy, burada x ve y iki ayrı karakterdir; bu öğe x ile başlayan, y ile biten ve x ve y “dengeli” olduğu dizelerle eşleşir. Bu, eğer biri dizeyi soldan sağa okursa, x için +1 ve y için -1 sayılırsa, y sonunun ilk y olduğu anlamına gelir. burada sayı 0'a ulaşır. Örneğin, %b() öğesi, ifadeleri dengeli parantezlerle eşleştirir.
  • %f[set], bir sınır örüntüsü; bu öğe, bir sonraki karakter set ve önceki karakter set ait olmayacak şekilde herhangi bir konumdaki boş bir dizeyle eşleşir. set daha önce açıklandığı gibi yorumlanır. Konunun başlangıcı ve sonu sanki '\ 0' karakteriymiş gibi işlenir.
    Sınır modellerinin mevcut olduğunu, ancak Lua 5.1'de belgelenmediğini ve 5.2'de Lua'ya resmi olarak eklendiğini unutmayın. Lua 5.2.1'deki uygulama 5.1.0'daki uygulama ile aynı değildir.
Desen

Bir desen bir dizi desen öğesidir.

Bir desenin başındaki '^', eşleşmeyi konu dizesinin başlangıcı. Bir desenin sonundaki '$', eşleşmeyi konu dizesinin sonu. Diğer pozisyonlarda, '^' ve '$' özel bir anlama sahip değildir ve kendilerini temsil eder.

Yakalamalar

Bir model parantez içine alınmış alt desenler içerebilir; yakalamaları tarif ediyorlar. Bir eşleşme başarılı olduğunda, konu dizesinin yakalamalarla eşleşen alt dizeleri ileride kullanılmak üzere saklanır ("yakalanır"). Yakalamalar sol parantezlerine göre numaralandırılır. Örneğin, (a*(.)%w(%s*)) deseninde, dizenin a*(.)%w(%s*) ilk yakalama olarak saklanır (ve bu nedenle 1 numaraya sahiptir); . ile eşleşen karakter 2 numara ile yakalanır ve %s* ile eşleşen parça 3 numaraya sahiptir.

Yakalama kaynakçası, kalıp dizesinin kendisinde görünebilir ve eşleşmede daha önce yakalanan metne geri dönebilir. Örneğin, ([a-z])%1 herhangi bir özdeş küçük harfle eşleşir, ([a-z])([a-z])([a-z])[a-z]%3%2%1 ise 7 harfli palindrome ile eşleşir.

Özel bir durum olarak, boş yakalama () geçerli dize konumunu (bir sayı) yakalar. Örneğin, "flaaap" dizesine "()aa()" kalıbını uygularsak, iki yakalama olur: 3 ve 5.

Tablo kütüphanesi

Tablo kitaplığındaki çoğu işlev, tablonun bir dizi temsil ettiğini varsayar.

table.foreach(), table.foreachi() ve table.getn() işlevleri kullanılabilir, ancak kullanımdan kaldırılmıştır. pairs() içeren bir for döngüsü, ipairs() içeren bir for döngüsü ve bunun yerine uzunluk operatörünü kullanın.

table.concat

table.concat( table, sep, i, j )

Tüm öğelerin dize veya sayı olduğu bir dizi verildiğinde, table[i] .. sep .. table[i+1] ··· sep .. table[j] döndürür.

sep için varsayılan değer boş dizedir, i için varsayılan 1 ve j için varsayılan değer tablonun uzunluğudur. i, j fazladan büyükse, boş dizeyi döndürür.

table.insert

table.insert( table, value )
table.insert( table, pos, value )

Gerekirse, table, pos konumuna value öğesini ekler, diğer öğeleri yukarı kaydırır. pos için varsayılan değer tablonun artı 1 uzunluğudur, böylece table.insert(t, x) çağrısı t tablonun sonuna x ekler.

#table kadar olan elemanlar kaydırılır; tablo dizi değilse uyarılar için Uzunluk operatörü konusuna bakın.

table.maxn

table.maxn( table )

Verilen tablonun en büyük pozitif sayısal dizinini veya tablonun pozitif sayısal dizinleri yoksa sıfır değerini döndürür.

Bunu yapmak için, tüm tabloyu tekrarlar. Bu kabaca eşittir

function table.maxn( table )
    local maxn, k = 0, nil
    repeat
        k = next( table, k )
        if type( k ) == 'number' and k > maxn then
            maxn = k
        end
    until not k
    return maxn
end

table.remove

table.remove( table, pos )

table konumundan pos konumundaki öğeyi kaldırır, gerekirse alanı kapatmak için diğer öğelerin aşağı kaydırılması. Kaldırılan öğenin değerini döndürür. pos için varsayılan değer tablonun uzunluğudur, böylece table.remove( t ) çağrısı, öğenin son öğesini kaldırır.

#table kadar olan elemanlar kaydırılır; tablo dizi değilse uyarılar için Uzunluk operatörü konusuna bakın.

table.sort

table.sort( table, comp )

Tablo öğelerini, table[1] üzerinden table[#table] verilen yerinde sırayla sıralar. comp verilirse, iki tablo öğesi alan ve birincisi ikiden küçük olduğunda true döndüren bir işlev olmalıdır (böylece not comp(a[i+1],a[i]) sıralamadan sonra doğru olur). comp verilmemişse, bunun yerine standart Lua operatörü < kullanılır.

Sıralama algoritması kararlı değil; yani, verilen sıra ile eşit kabul edilen öğeler, göreceli konumlarını sıralamaya göre değiştirebilir.

Scribunto kütüphaneleri

Tüm Scribunto kütüphaneleri mw tablosunda bulunur.

Temel işlevler

mw.addWarning

mw.addWarning( text )

Bir düzenlemeyi önizlerken önizlemenin üzerinde görüntülenen bir uyarı ekler. text vikimetin olarak ayrıştırılır.

mw.allToString

mw.allToString( ... )

Tüm bağımsız değişkenlerde tostring() öğesini çağırır, ardından bunları ayırıcılar olarak sekmelerle birleştirir.

mw.clone

mw.clone( value )

Bir değerin derin bir kopyasını oluşturur. Tüm tablolar (ve meta tabloları) sıfırdan yeniden yapılandırılmıştır. Ancak işlevler hala paylaşılmaktadır.

mw.getCurrentFrame

mw.getCurrentFrame()

Geçerli frame nesnesi, genellikle en yeni #invoke öğesinden kare nesnesi döndürür.

mw.incrementExpensiveFunctionCount

mw.incrementExpensiveFunctionCount()

"Pahalı ayrıştırıcı işlevi" sayısına bir tane ekler ve sınırı aşarsa bir istisna atar ($wgExpensiveParserFunctionLimit bakın).

mw.isSubsting

mw.isSubsting()

Geçerli #invoke substed ise true değerini, aksi takdirde false değerini döndürür. Doldurma ve dibe ayarlamadaki farklar hakkında tartışma için yukarıdaki Metin döndürme konusuna bakın.

mw.loadData

mw.loadData( module )

Bazen bir modülün büyük veri tablolarına ihtiyacı vardır; örneğin, ölçü birimlerini dönüştürmek için genel amaçlı bir modül geniş bir tanınmış birimler tablosu ve bunların dönüşüm faktörlerini gerektirebilir. Ve bazen bu modüller bir sayfada birçok kez kullanılacaktır. Her bir {{#invoke:}} için büyük veri tablosunu ayrıştırmak önemli miktarda zaman kullanabilir. Bu sorunu önlemek için mw.loadData() sağlanır.

mw.loadData, aşağıdaki farklarla birlikte #require require() gibi çalışır:

  • Yüklenen modül, her {{#invoke:}} çağrısı için bir defa yerine sayfa başına yalnızca bir kez değerlendirilir.
  • Yüklenen modül package.loaded içine kaydedilmez.
  • Yüklenen modülden döndürülen değer bir tablo olmalıdır. Diğer veri türleri desteklenmez.
  • Döndürülen tablo (ve tüm alt tablolar) yalnızca boole, sayı, dize ve diğer tabloları içerebilir. Diğer veri türlerine, özellikle işlevlere izin verilmez.
  • Döndürülen tabloda (ve tüm alt tablolarda) metatable olmayabilir.
  • Tüm tablo anahtarları boole, sayı veya dize olmalıdır.
  • mw.loadData() tarafından döndürülen tablonun, modül tarafından döndürülen tabloya salt okunur erişim sağlayan metametreleri vardır. Verileri doğrudan içermediğinden, pairs() ve ipairs() çalışır ancak #value, next() ve Tablo kitaplığı, düzgün çalışmaz.

Yukarıda bahsedilen varsayımsal birim dönüştürme modülü kodunu "Module:Convert" de ve verilerini "Module:Convert/data" ve "Module:Convert" local data = mw.loadData( 'Module:Convert/data' ) verileri verimli bir şekilde yüklemek için.

mw.dumpObject

mw.dumpObject( object )

object insan tarafından okunabilir bir temsile seri hale getirir ve ardından elde edilen dizeyi döndürür.

mw.log

mw.log( ... )

Bağımsız değişkenleri mw.allToString() öğesine iletir, sonra elde edilen dizeyi günlük arabelleğine ekler.

Hata ayıklama konsolunda, print() işlevi bu işlev için bir diğer addır.

mw.logObject

mw.logObject( object )
mw.logObject( object, prefix )

mw.dumpObject() öğesini çağırır ve elde edilen dizeyi günlük arabelleğine ekler. prefix verilirse, günlük arabelleğine eklenir ve ardından serileştirilmiş dize eklenmeden önce eşittir işareti gelir.(yani kaydedilen metin "prefix = object-string" olacaktır).

Frame nesnesi

Frame nesnesi, {{#invoke:}} iletilen parametrelere ve ayrıştırıcıya arabirimdir.

Çerçeve kitaplığı olmadığını ve frame adlı genel değişken olmadığını unutmayın. Bir çerçeve nesnesi tipik olarak {{#invoke:}} olarak adlandırılan işleve parametre olarak geçirilerek elde edilir ve ayrıca mw.getCurrentFrame() üzerinden elde edilebilir.

frame.args

Çerçeveye iletilen bağımsız değişkenlere erişmek için bir tablo. Örneğin, vikimetin bir modül çağrılırsa

{{#invoke:module|function|arg1|arg2|name=arg3}}

frame.args[1] "arg1", frame.args[2] "arg2" ve frame.args['name'] (veya frame.args.name) "arg3" döndürür. pairs( frame.args ) veya ipairs( frame.args ) kullanarak argümanlar üzerinde yineleme yapmak da mümkündür. Bununla birlikte, Lua'nın tablo yineleyicilerini nasıl uyguladığı nedeniyle, argümanlar üzerinde yineleme bunları belirtilmemiş bir sırayla döndürür ve vikimetinde göründükleri gibi orijinal düzeni bilmenin bir yolu yoktur.

Bu tablodaki değerlerin her zaman dize olduğunu unutmayın; Gerekirse, tonumber() sayılara dönüştürmek için kullanılabilir. Ancak anahtarlar, çağırmada açıkça belirtilse bile rakamlardır: {{#invoke:module|function|1|2=2}}, 1 ve 2 sayısal tuşları ile dizinlenmiş "1" ve "2" dize değerlerini verir.

MediaWiki şablon çağrılarında olduğu gibi, adlandırılmış argümanlar Lua'ya iletilmeden önce hem addan hem de değerden önde gelen ve sondaki boşluklardan çıkarılırken, adlandırılmamış bağımsız değişkenler boşluk bırakılmaz.

Performans nedenleriyle, frame.args doğrudan bağımsız değişkenleri içermek yerine metatable kullanır. Bağımsız değişken değerleri talep üzerine MediaWiki'den istenir. Bu, #frame.args, next( frame.args ) ve Tablo kütüphanesi içindeki işlevler de dahil olmak üzere diğer birçok tablo yönteminin düzgün çalışmayacağı anlamına gelir.

Şablon çağırma ve üçlü ayraç bağımsız değişkenleri gibi önişlemci sözdizimi #invoke bağımsız değişkenine dahil edilirse, değerleri Lua'da istenene kadar Lua'ya iletildikten sonra genişletilmez. XML gösteriminde yazılan <pre>, <nowiki>, <gallery> ve <ref> gibi bazı özel etiketler #invoke'a bağımsız değişken olarak dahil edilirse, bu etiketler "şerit işaretleyicileri" biçimine dönüştürülür. Silme karakteriyle (ASCII 127) başlayan özel dizeler, #invoke'tan döndürüldükten sonra HTML ile değiştirilir.

frame:callParserFunction

frame:callParserFunction( name, args )
frame:callParserFunction( name, ... )
frame:callParserFunction{ name = string, args = table }

Adlı argümanlar kullanımına dikkat edin.

Uygun bir dize döndürerek bir ayrıştırıcı işlevi çağırın. Mümkün olduğunda, yerel Lua işlevleri veya Scribunto kitaplığı işlevleri bu arabirime tercih edilmelidir.

Aşağıdaki çağrılar, belirtilen vikimetin ile yaklaşık olarak eşdeğerdir:

-- {{ns:0}}
frame:callParserFunction{ name = 'ns', args = 0 }

-- {{#tag:nowiki|some text}}
frame:callParserFunction{ name = '#tag', args = { 'nowiki', 'some text' } }
frame:callParserFunction( '#tag', { 'nowiki', 'some text' } )
frame:callParserFunction( '#tag', 'nowiki', 'some text' )
frame:callParserFunction( '#tag:nowiki', 'some text' )

-- {{#tag:ref|some text|name=foo|group=bar}}
frame:callParserFunction{ name = '#tag:ref', args = {
    'some text', name = 'foo', group = 'bar'
} }

frame:expandTemplate() ile olduğu gibi, işlev adı ve bağımsız değişkenlerin ayrıştırıcı işlevine geçirilmeden önce önceden işlenmediğini unutmayın.

frame:expandTemplate

frame:expandTemplate{ title = title, args = table }

Adlı argümanlar kullanımına dikkat edin.

Bu yansıtmadır. Çağrı

frame:expandTemplate{ title = 'template', args = { 'arg1', 'arg2', name = 'arg3' } }

yaklaşık {{template|arg1|arg2|name=arg3}} vikimetin Lua aynı şeyi yapar. Eklemede olduğu gibi, iletilen başlık bir ad alanı öneki içermiyorsa, Şablon: ad alanında olduğu varsayılır.

Başlık ve bağımsız değişkenlerin şablona aktarılmadan önce önceden işlenmediğini unutmayın:

-- Bu yaklaşık {{template|{{!}}}} gibi vikimetin ile eşdeğerdir
frame:expandTemplate{ title = 'template', args = { '|' } }

-- Bu yaklaşık {{template|{{((}}!{{))}}}} gibi vikimetin ile eşdeğerdir
frame:expandTemplate{ title = 'template', args = { '{{!}}' } }

frame:extensionTag

frame:extensionTag( name, content, args )
frame:extensionTag{ name = string, content = string, args = table_or_string }

Bu, $1 işlev adı ve content ile args eklenmiş frame:callParserFunction() çağrısına eşdeğerdir.

-- Bunlar eşittir
frame:extensionTag{ name = 'ref', content = 'some text', args = { name = 'foo', group = 'bar' } }
frame:extensionTag( 'ref', 'some text', { name = 'foo', group = 'bar' } )

frame:callParserFunction{ name = '#tag:ref', args = {
    'some text', name = 'foo', group = 'bar'
} }

-- Bunlar eşittir
frame:extensionTag{ name = 'ref', content = 'some text', args = 'some other text' }
frame:callParserFunction{ name = '#tag:ref', args = {
    'some text', 'some other text'
} }

frame:getParent

frame:getParent()

{{#invoke:}} tarafından oluşturulan çerçeveye çağrılan, {{#invoke:}} adlı çerçevesini döndürür. Bu kareye çağrıldığında sıfır döndürür.

Örneğin, {{Example}} şablonu {{#invoke:ModuleName}} kodunu içeriyorsa ve bir sayfa bu şablonu çevirir ve ona argümanlar sağlar ({{Example|arg1|arg2}}), mw.getCurrentFrame():getParent().args[1], mw.getCurrentFrame():getParent(). Module:ModuleName içindeki args[2], "arg1", "arg2" değerlerini döndürür.

frame:getTitle

frame:getTitle()

Çerçeveyle ilişkilendirilmiş başlığı dize olarak döndürür. {{#invoke:}} tarafından oluşturulan çerçeve için, bu çağrılan modülün başlığıdır.

frame:newChild

frame:newChild{ title = title, args = table }

Adlı argümanlar kullanımına dikkat edin.

Geçerli çerçevenin alt öğesi olan isteğe bağlı bağımsız değişkenler ve başlık içeren yeni bir Frame nesnesi oluşturun.

Bu temelde hata ayıklama konsolunda normalde {{#invoke:}} tarafından çağrılacak işlevleri test etmek için kullanılır. Herhangi bir zamanda oluşturulabilecek kare sayısı sınırlıdır.

frame:preprocess

frame:preprocess( string )
frame:preprocess{ text = string }

Bu, wikitext'i çerçeve bağlamında genişletir, yani şablonlar, ayrıştırıcı işlevleri ve {{{1}}} gibi parametreler genişletilir. XML stili gösterimle yazılmış belirli özel etiketler, <pre>, <nowiki>, <gallery> and <ref> gibi,"strip işaretçileri" ile değiştirilecek. Silme karakteriyle (ASCII 127) başlayan özel dizeler, #invoke üzerinden döndükten sonra HTML ile değiştirilir

Tek bir şablonu genişletiyorsanız, bu yönteme geçmek için vikimetin dizesi oluşturmaya çalışmak yerine frame:expandTemplate kullanın. Bağımsız değişkenler dikey karakterler veya başka viki işaretleme içeriyorsa daha hızlı ve daha az hataya açıktır.

Tek bir ayrıştırıcı işlevini genişletiyorsanız, aynı nedenlerle frame:callParserFunction kullanın.

frame:getArgument

frame:getArgument( arg )
frame:getArgument{ name = arg }

Belirtilen bağımsız değişken için bir nesneyi veya bağımsız değişken sağlanmamışsa nil değerini alır.

Döndürülen nesnenin, bağımsız değişken için genişletilmiş vikimetin değerini döndüren bir yöntemi, object:expand() vardır.

frame:newParserValue

frame:newParserValue( text )
frame:newParserValue{ text = text }

frame:preprocess(text) sonucunu döndüren bir yöntem olan object:expand() içeren bir nesne döndürür.

frame:newTemplateParserValue

frame:newTemplateParserValue{ title = title, args = table }

Adlı argümanlar kullanımına dikkat edin.

Belirtilen bağımsız değişkenlerle çağrılan frame:expandTemplate sonucunu döndüren bir yöntemle, object:expand() içeren bir nesne döndürür.

frame:argumentPairs

frame:argumentPairs()

pairs( frame.args ) ile aynı. Geriye dönük uyumluluk için dahil edilmiştir.

Karma kitaplığı

mw.hash.hashValue

mw.hash.hashValue( algo, value )

Belirtilen algoritmaya sahip bir dize değerini karma yapar. Geçerli algoritmalar mw.hash.listAlgorithms() kullanılarak getirilebilir.

mw.hash.listAlgorithms

mw.hash.listAlgorithms()

mw.hash.hashValue () içinde kullanım için desteklenen karma algoritmaların bir listesini döndürür.

HTML kütüphanesi

mw.html, Lua'dan karmaşık HTML oluşturmak için akıcı bir arayüzdür. Bir mw.html nesnesi mw.html.create kullanılarak oluşturulabilir.

mw.html.name olarak belgelenen işlevler genel mw.html tablosunda mevcuttur; mw.html:name ve html:name olarak belgelenen işlevler bir mw.html nesnesinin yöntemleridir (mw.html.create bölümüne bakın).

Temel bir örnek şöyle görünebilir:

local div = mw.html.create( 'div' )
div
     :attr( 'id', 'testdiv' )
     :css( 'width', '100%' )
     :wikitext( 'Some text' )
     :tag( 'hr' )
return tostring( div )
-- Output: <div id="testdiv" style="width:100%;">Some text<hr /></div>

mw.html.create

mw.html.create( tagName, args )

tagName html öğesi içeren yeni bir mw.html nesnesi oluşturur. Boş bir mw.html nesnesi oluşturmak için boş bir dize veya nil tagName olarak da iletebilirsiniz.

args, aşağıdaki anahtarları içeren bir tablo olabilir:

  • args.selfClosing: mw.html etiketi kendi kendine kapanma olarak tanımasa bile, geçerli etiketi kendi kendine kapanmaya zorlayın
  • args.parent: Geçerli mw.html örneğinin üst öğesi (dahili kullanım için tasarlanmıştır)

mw.html:node

html:node( builder )

Geçerli mw.html örneğine bir alt mw.html (builder) düğümü ekler. Bir nil parametresi iletilirse, bu bir no-op'dur. (builder) düğümü, bir html öğesinin dize temsilidir.

mw.html:wikitext

html:wikitext( ... )

mw.html nesnesine belirsiz sayıda vikimetin dizesi ekler.

Bunun ilk nil öğesinde durduğunu unutmayın.

mw.html:newline

html:newline()

nw.html nesnesine bir yeni satır ekler.

mw.html:tag

html:tag( tagName, args )

Oluşturucuya verilen tagName ile yeni bir alt düğüm ekler ve bu yeni düğümü temsil eden bir mw.html örneği döndürür. args parametresi mw.html.create ile aynıdır

mw.html:attr

html:attr( name, value )
html:attr( table )

Düğümde verilen name ve value ile bir HTML özelliği ayarlayın. Alternatif olarak, ayarlanacak özniteliklerin name->value çiftlerini içeren bir tablo geçirilebilir. İlk formda, nil değeri, daha önce ayarlanmışsa, verilen ada sahip herhangi bir özelliğin ayarlanmamasına neden olur.

mw.html:getAttr

html:getAttr( name )

Belirtilen name ile html:attr() kullanarak önceden ayarlanmış bir html özelliğinin değerini alın.

mw.html:addClass

html:addClass( class )

Düğümün sınıf özniteliğine bir sınıf adı ekler. Bir nil parametresi iletilirse, bu bir no-op'dur.

mw.html:css

html:css( name, value )
html:css( table )

Düğümde verilen name ve value ile bir CSS özelliği ayarlayın. Alternatif olarak, ayarlanacak özelliklerin name->value çiftlerini içeren bir tablo geçirilebilir. İlk formda, nil değeri, daha önce ayarlanmışsa, belirtilen ada sahip herhangi bir özelliğin ayarlanmamasına neden olur.

mw.html:cssText

html:cssText( css )

Düğümün stil özelliğine ham css ekleyin. Bir nil parametresi iletilirse, bu bir no-op'dur.

mw.html:done

html:done()

Geçerli düğümün oluşturulduğu üst düğümü döndürür. jQuery.end gibi, bu, birkaç alt düğümün yapımının birlikte tek bir ifadeye zincirlenmesine izin veren bir kolaylık işlevidir.

mw.html:allDone

html:allDone()

html:done() gibi, ancak ağacın kök düğümüne kadar gidip onu döndürür.

Dil kütüphanesi

Dil kodları dil kodu da açıklanmaktadır. MediaWiki'nin dil kodlarının çoğu IETF dil etiketleri ile benzerdir, ancak tüm MediaWiki dil kodları geçerli IETF etiketleri değildir veya tam tersi değildir.

mw.language.name olarak belgelenen işlevler genel mw.language tablosunda mevcuttur; mw.language:name ve lang:name olarak belgelenen işlevler bir dil nesnesinin yöntemleridir (mw.language.new veya mw.language.getContentLanguage bölümlere bakın).

mw.language.fetchLanguageName

mw.language.fetchLanguageName( code, inLanguage )

Verilen dil kodu için dilin tam adı: yerel ad (dil özerkliği), varsayılan olarak inLanguage için bir değer verilirse hedef dile çevrilen ad.

mw.language.fetchLanguageNames

mw.language.fetchLanguageNames()
mw.language.fetchLanguageNames( inLanguage )
mw.language.fetchLanguageNames( inLanguage, include )

MediaWiki tarafından bilinen dillerin listesini getirerek bir tablo eşleme dil kodunu dil adına döndürür.

Varsayılan olarak döndürülen ad, dil özerkliğidir; inLanguage için bir dil kodu iletilmesi, o dildeki tüm adları döndürür.

Varsayılan olarak, yalnızca MediaWiki tarafından bilinen dil adları döndürülür; include için 'all' iletilirse, kullanılabilir tüm diller (ör. Extension:CLDR kaynağından) döndürülürken 'mwfile' yalnızca MediaWiki çekirdeği veya etkin uzantılarla birlikte özelleştirilmiş iletileri içeren dilleri içerir. Varsayılanı açıkça seçmek için 'mw' geçirilebilir.

mw.language.getContentLanguage

mw.language.getContentLanguage()
mw.getContentLanguage()

Vikinin varsayılan içerik dili için yeni bir dil nesnesi döndürür.

mw.language.getFallbacksFor

 
Yedek zincirler

mw.language.getFallbacksFor( code )

Belirtilen kod için MediaWiki'nin yedek dil kodlarının bir listesini döndürür.

mw.language.isKnownLanguageTag

mw.language.isKnownLanguageTag( code )

MediaWiki tarafından bir dil kodu biliniyorsa true değerini döndürür.

Bir dil kodu, "geçerli bir yerleşik kod" ise "bilinir" (yani mw.language.isValidBuiltInCode için true değerini döndürür) ve mw.language.fetchLanguageName için boş olmayan bir dize döndürür.

mw.language.isSupportedLanguage

mw.language.isSupportedLanguage( code )

MediaWiki'de bu dil kodu için herhangi bir yerelleştirmenin olup olmadığını kontrol eder.

"Geçerli" bir kodsa (mw.language.isValidCode için true döndürürür), büyük harf içermiyor ve şu anda çalışan MediaWiki sürümünde bir mesaj dosyası var.

Bir dil kodunun "desteklenmesi", ancak "bilinmemesi" mümkündür (yani mw.language.isKnownLanguageTag için true değerini döndürmek). Ayrıca mw.language.isValidBuiltInCode yanlış döndürmesine rağmen bazı kodların "desteklendiğini" unutmayın.

mw.language.isValidBuiltInCode

mw.language.isValidBuiltInCode( code )

Bir dil kodu MediaWiki'nin dahili olarak özelleştirilmesi için geçerli bir formdaysa true değerini döndürür.

Kod aslında bilinen herhangi bir dile karşılık gelmeyebilir.

Bir dil kodu "geçerli" bir kodsa "geçerli bir yerleşik kod" (yani mw.language.isValidCode için true değerini döndürür); yalnızca ASCII harfleri, sayıları ve tirelerinden oluşur; ve en az iki karakter uzunluğundadır.

Bu kod yanlış döndürülse bile bazı kodların "desteklendiğini" (yani mw.language.isSupportedLanguage üzerinden true döndürmek) unutmayın.

mw.language.isValidCode

mw.language.isValidCode( code )

Bir dil kodu dizesi, var olsun ya da olmasın, geçerli bir biçime sahipse true değerini döndürür. Bu, yalnızca MediaWiki ad alanı üzerinden özelleştirme için kullanılan kodları içerir.

Kod aslında bilinen herhangi bir dile karşılık gelmeyebilir.

Belirli bir güvenli olmayan karakter içermiyorsa (iki nokta üst üste, tek veya çift tırnak, eğik çizgi, ters eğik çizgi, açılı ayraçlar, ve işareti veya ASCII NUL) bir dil kodu geçerlidir ve aksi takdirde sayfa başlığında izin verilir.

mw.language.new

mw.language.new( code )
mw.getLanguage( code )

Yeni bir dil nesnesi oluşturur. Dil nesnelerinin herkese açık olarak erişilebilir özellikleri yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.

Bir sayfada kullanılabilecek farklı dil kodlarının sayısında bir sınırlama vardır. Bu sınırı aşmak hatalarla sonuçlanır.

mw.language:getCode

lang:getCode()

Bu dil nesnesinin dil kodunu döndürür.

mw.language:getFallbackLanguages

lang:getFallbackLanguages()

MediaWiki'nin bu dil nesnesi için yedek dil kodlarının bir listesini döndürür. mw.language.getFallbacksFor( lang:getCode() ) ile eşittir.

mw.language:isRTL

lang:isRTL()

Dil sağdan sola yazılırsa true, soldan sağa yazılırsa false değerini döndürür.

mw.language:lc

lang:lc( s )

Dizeyi, verilen dil için herhangi bir özel kurala uygun olarak küçük harfe dönüştürür.

Ustring kütüphanesi yüklendiğinde, mw.ustring.lower() işlevi mw.language.getContentLanguage():lc( s ) çağrısı olarak uygulanır.

mw.language:lcfirst

lang:lcfirst( s )

Dizenin ilk karakterini lang:lc() gibi küçük harfe dönüştürür.

mw.language:uc

lang:uc( s )

Dizeyi, verilen dil için herhangi bir özel kurala uygun olarak büyük harfe dönüştürür.

Ustring kütüphanesi yüklendiğinde, mw.ustring.upper() işlevi mw.language.getContentLanguage():lc( s ) çağrısı olarak uygulanır.

mw.language:ucfirst

lang:ucfirst( s )

Dizenin ilk karakterini lang:lc() gibi büyük harfe dönüştürür.

mw.language:caseFold

lang:caseFold( s )

Dizeyi, büyük/küçük harfe duyarlı olmayan karşılaştırma için uygun bir temsile dönüştürür. Sonuç görüntülendiğinde herhangi bir anlam ifade etmeyebilir.

mw.language:formatNum

lang:formatNum( n )
lang:formatNum( n, options )

Bir sayıyı, verilen dile uygun gruplama ve ondalık ayırıcılarla biçimlendirir. 123456.78 verildiğinde, bu, dile ve wiki yapılandırmasına bağlı olarak "123,456.78", "123.456,78" hatta "١٢٣٬٤٥٦٫٧٨" gibi bir şey üretebilir.

options aşağıdakiler olabilen bir seçenekler tablosudur:

  • noCommafy: Gruplama ayırıcılarını atlamak için true olarak ayarlayın ve ondalık ayırıcı olarak bir nokta (.) kullanın. Ondalık ayırıcının dönüştürülmesini içerebilen basamak dönüşümü yine de gerçekleşebilir.

mw.language:formatDate

lang:formatDate( format, timestamp, local )

Bir tarihi, verilen biçim dizesine göre biçimlendirir. timestamp atlanırsa, varsayılan geçerli saattir. local değeri bir boole veya sıfır olmalıdır; true olursa, saat UTC yerine vikinin yerel saati şeklinde biçimlendirilir.

timestamp için biçim dizesi ve desteklenen değerler, Extension:ParserFunctions üzerindeki #time ayrıştırıcı işlevi ile aynıdır. Bununla birlikte, ters eğik çizgilerin bir Lua dizgesinde iki katına çıkarılması gerekebilir, çünkü Lua ayrıca bir çıkış karakteri olarak ters eğik çizgiyi kullanırken vikimetin bunu yapmaz:

-- Bu dize değişmez değeri, "\n" iki karakterini değil, yeni bir satır içerir, bu nedenle {{#time:\n}} ile eşdeğer değildir.
lang:formatDate( '\n' )

-- Bu, {{#time:\\n}} ile değil, {{#time:\n}} ile eşdeğerdir.
lang:formatDate( '\\n' )

-- Bu, {{#time:\\\n}} ile değil, {{#time:\\n}} ile eşdeğerdir.
lang:formatDate( '\\\\n' )

mw.language:formatDuration

lang:formatDuration( seconds )
lang:formatDuration( seconds, allowedIntervals )

Saniye cinsinden bir süreyi daha fazla insan tarafından okunabilen birimlere böler, ör. 12345 ila 3 saat, 25 dakika ve 45 saniye, sonucu dize olarak döndürür.

allowedIntervals, belirtilirse, yanıtta kullanılacak aralık birimlerini adlandıran değerlerin bulunduğu bir tablodur. Bunlar arasında 'millennia', 'centuries', 'decades', 'years', 'weeks', 'days', 'hours', 'minutes' ve 'seconds' sayılabilir.

mw.language:parseFormattedNumber

lang:parseFormattedNumber( s )

Bu, lang:formatNum() tarafından biçimlendirildiği gibi bir sayı alır ve gerçek sayıyı döndürür. Başka bir deyişle, bu temel olarak tonumber() dile duyarlı bir sürümüdür.

mw.language:convertPlural

lang:convertPlural( n, ... )
lang:convertPlural( n, forms )
lang:plural( n, ... )
lang:plural( n, forms )

Bu, forms (array tablosu olmalı) veya ... numarasını n sayısına göre uygun gramer biçimini seçer.. Örneğin, İngilizce olarak, yalnızca 1 çorap veya 200 çorap olsun, dilbilgisi açısından doğru metin oluşturmak için n .. ' ' .. lang:plural( n, 'sock', 'socks' ) veya n .. ' ' .. lang:plural( n, { 'sock', 'socks' } ) kullanabilirsiniz.

Dizi için gerekli değerler dile bağlıdır; bazı ayrıntılar için sihirli kelimelerin yerelleştirilmesi ve translatewiki'nin SSS konusuna bakın.

mw.language:convertGrammar

lang:convertGrammar( word, case )
lang:grammar( case, word )

İki takma ad arasındaki farklı parametre sırasına dikkat edin. convertGrammar, MediaWiki'nin Dil nesnesinde aynı addaki yöntemin sırası ile eşleşirken, grammar, Special:MyLanguage/Help:Magic words#Localisation sayfasında belgelenen aynı adın ayrıştırıcı işlevinin sırasıyla eşleşir.

Bu, verilen bükülme kodu case için uygun bükülmüş word biçimini seçer.

word ve case için olası değerler dile bağlıdır, bazı ayrıntılar için Special:MyLanguage/Help:Magic words#Localisation ve translatewiki:Grammar sayfalarına bakın.

mw.language:gender

lang:gender( what, masculine, feminine, neutral )
lang:gender( what, { masculine, feminine, neutral } )

"Erkek", "kadın" veya kayıtlı bir kullanıcı adı olabilecek what cinsiyetine karşılık gelen dizeyi seçer.

mw.language:getArrow

lang:getArrow( direction )

direction karşılık gelen bir Unicode ok karakteri döndürür:

  • forwards: Dilin yönüne bağlı olarak ya "→" ya da "←".
  • backwards: Dilin yönlülüğüne bağlı olarak ya "←" ya da "→".
  • left: "←"
  • right: "→"
  • up: "↑"
  • down: "↓"

mw.language:getDir

lang:getDir()

Dilin yönlülüğüne bağlı olarak "ltr" veya "rtl" değerini döndürür.

mw.language:getDirMark

lang:getDirMark( opposite )

Dilin yönlülüğüne ve opposite öğesinin bir dil olup olmadığına bağlı olarak, U+200E (soldan sağa işaret) veya U+200F (sağdan sola işaret) içeren bir dize döndürür doğru veya yanlış değer.

mw.language:getDirMarkEntity

lang:getDirMarkEntity( opposite )

Dilin yönlülüğüne ve opposite öğesinin doğru veya yanlış değer olup olmamasına bağlı olarak "&lrm;" veya "&rlm;" değerini döndürür.

mw.language:getDurationIntervals

lang:getDurationIntervals( seconds )
lang:getDurationIntervals( seconds, allowedIntervals )

Saniye cinsinden bir süreyi daha fazla insan tarafından okunabilen birimlere böler, ör. 12345 ile 3 saat, 25 dakika 45 saniye arasında değişen sonuç, tablo eşleme birimi olarak adların sayılara döndürülmesi.

Örneğin, { ['hours'] = 3, ['minutes'] = 25, ['seconds'] = 45 }

allowedIntervals, verilmişse, yanıtta kullanılacak aralık birimlerini adlandıran değerlere sahip bir tablodur. Bunlar arasında 'millennia', 'centuries', 'decades', 'years', 'weeks', 'days', 'hours', 'minutes' ve 'seconds' sayılabilir.

allowedIntervals içindeki birim adları herhangi bir sırayla belirtilebilir (şu anda yalnızca İngilizce, kullanılan dil nesnesinin girintili haliyle ve yalnızca çoğaltılmış kısaltılmış biçimleriyle yalnızca birim adlarının sembolik olduğu ancak hala çevrilmemiştir ve atanan değerlerine göre dilbilgisel olarak değiştirilmemiştir). Giriş tablosu yalnızca desteklenmeyen birim adları içeriyorsa, döndürülen tablo boş olur. Giriş tablosu belirtilmezse, sıfırsa veya boşsa, varsayılan olarak desteklenen birimler için (en kısa birim için 'saniye' dahil) statik bir tablo kullanılır.

Saniye cinsinden belirtilen süre önce istenen en kısa ünitenin tamsayı sayısına yuvarlanır. Döndürülen dizideki üye sayısı değişkendir ve yalnızca yuvarlatılmış saniye sayısı kesinlikle pozitifse döndürülen tabloda yalnızca sıfırdan farklı bir değere eşlenen birim adları tutulur. Aksi takdirde, yalnızca en kısa istenen birim adına (varsayılan olarak 'seconds') üye yuvarlama süresine ayarlanır.

Mesaj kütüphanesi

Bu kütüphane, yerelleştirme mesajlarına ve MediaWiki: ad alanına bir arabirimdir.

mw.message.name olarak belgelenen işlevler genel mw.message tablosunda mevcuttur; mw.message:name ve msg:name olarak belgelenen işlevler bir mesaj nesnesinin yöntemleridir (mw.message.new bölümüne bakın).

mw.message.new

mw.message.new( key, ... )

Belirtilen key mesajı için yeni bir mesaj nesnesi oluşturur. Kalan parametreler yeni nesnenin params() yöntemine iletilir.

İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.

mw.message.newFallbackSequence

mw.message.newFallbackSequence( ... )

Verilen mesajlar için yeni bir mesaj nesnesi oluşturur (var olan ilk mesaj kullanılır).

İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.

mw.message.newRawMessage

mw.message.newRawMessage( msg, ... )

Uluslararası bir iletiyi aramak yerine, verilen metni doğrudan kullanarak yeni bir ileti nesnesi oluşturur. Kalan parametreler yeni nesnenin params() yöntemine iletilir.

İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.

mw.message.rawParam

mw.message.rawParam( value )

msg:parse() tarafından vikimetin olarak ayrıştırılmayacak şekilde değeri sarar.

mw.message.numParam

mw.message.numParam( value )

Değeri, otomatik olarak lang:formatNum() tarafından biçimlendirilecek şekilde sarar. Bunun gerçekte mevcut olan Dil kütüphanesi kaynağına bağlı olmadığını unutmayın.

mw.message.getDefaultLanguage

mw.message.getDefaultLanguage()

Varsayılan dil için bir Dil nesnesi döndürür.

mw.message:params

msg:params( ... )
msg:params( params )

Mesaja bağımsız bağımsız değişkenler olarak veya array tablosu olarak iletilebilen parametreler ekleyin. Parametreler sayı, dize veya mw.message.numParam() veya mw.message.rawParam() tarafından döndürülen özel değerler olmalıdır. Bir sıra tablosu kullanılıyorsa, parametreler doğrudan tabloda bulunmalıdır; __index metamethod kullanan kaynaklar çalışmaz.

Çağrı zincirlemeye izin vermek için msg nesnesini döndürür.

mw.message:rawParams

msg:rawParams( ... )
msg:rawParams( params )

:params() gibi, ancak önce tüm parametreleri mw.message.rawParam() içinden geçirme etkisi vardır.

Çağrı zincirlemeye izin vermek için msg nesnesini döndürür.

mw.message:numParams

msg:numParams( ... )
msg:numParams( params )

:params() gibi, ancak önce tüm parametreleri mw.message.numParam() içinden geçirme etkisi vardır.

Çağrı zincirlemeye izin vermek için msg nesnesini döndürür.

mw.message:inLanguage

msg:inLanguage( lang )

İletiyi işlerken kullanılacak dili belirtir. lang, bir dize veya getCode() yöntemine sahip bir tablo olabilir (yani Dil nesnesi).

Varsayılan dil, mw.message.getDefaultLanguage() tarafından döndürülen dildir.

Çağrı zincirlemeye izin vermek için msg nesnesini döndürür.

mw.message:useDatabase

msg:useDatabase( bool )

MediaWiki: ad alanında iletileri mi arayacağınızı (yani veritabanına bakın) mı yoksa yalnızca MediaWiki ile dağıtılan varsayılan iletileri mi kullanılacağını belirtir.

Varsayılan true.

Çağrı zincirlemeye izin vermek için msg nesnesini döndürür.

mw.message:plain

msg:plain()

Parametreleri değiştirir ve wikitext mesajını olduğu gibi döndürür. Şablon çağrıları ve ayrıştırıcı işlevleri aynıdır.

mw.message:exists

msg:exists()

Mesaj anahtarının var olup olmadığını gösteren bir boole döndürür.

mw.message:isBlank

msg:isBlank()

Mesaj anahtarının içeriğe sahip olup olmadığını gösteren bir boole döndürür. Mesaj tuşu yoksa veya mesaj boş dize ise true değerini döndürür.

mw.message:isDisabled

msg:isDisabled()

Mesaj tuşunun devre dışı bırakılıp bırakılmadığını gösteren bir boole döndürür. Mesaj tuşu yoksa veya mesaj boş dize veya "-" dizesi ise true değerini döndürür.

Site kütüphanesi

mw.site.currentVersion

MediaWiki'nin geçerli sürümünü tutan bir dize.

mw.site.scriptPath

$wgScriptPath değeri.

mw.site.server

$wgServer değeri.

mw.site.siteName

$wgSitename değeri.

mw.site.stylePath

$wgStylePath değeri.

mw.site.namespaces

Sayıya göre dizine eklenen tüm ad alanları için tablo tutma verileri.

Mevcut veriler:

  • id: Ad alanı numarası.
  • name: Yerel ad alanı adı.
  • canonicalName: Kanonik ad alanı adı.
  • displayName: Ad alanı 0'da, görüntüleme için kullanılacak ad olarak ayarlayın (ad genellikle boş dize olduğundan).
  • hasSubpages: Alt sayfaların ad alanı için etkin olup olmadığı.
  • hasGenderDistinction: Ad alanının farklı cinsiyetler için farklı takma adları olup olmadığı.
  • isCapitalized: Ad alanındaki sayfaların ilk harfinin büyük olup olmadığı.
  • isContent: Bunun bir içerik ad alanı olup olmadığı.
  • isIncludable: Ad alanındaki sayfaların kopyalanıp aşılamayacağı.
  • isMovable: Ad alanındaki sayfaların taşınıp taşınamayacağı.
  • isSubject: Bunun bir konu ad alanı olup olmadığı.
  • isTalk: Bunun bir tartışma ad alanı olup olmadığı.
  • defaultContentModel: Dize olarak ad alanının varsayılan içerik modeli.
  • aliases: Ad alanı için takma ad listesi.
  • subject: İlgili konu ad alanının verilerine kaynak.
  • talk: İlgili tartışma ad alanının verilerine kaynak.
  • associated: İlişkili ad alanının verilerine kaynak.

Ad alanlarını ada göre (yerelleştirilmiş veya standart) aramaya izin veren bir metatable da ayarlanır. Örneğin, hem mw.site.namespaces[4] hem de mw.site.namespaces.Project, Proje ad alanı hakkında bilgi döndürür.

mw.site.contentNamespaces

Yalnızca içerik ad alanlarını tutan ve sayıya göre dizine eklenmiş tablo. Ayrıntılar için mw.site.namespaces bölümüne bakın.

mw.site.subjectNamespaces

Sayıya göre dizine eklenmiş olarak yalnızca konu ad alanlarını tutan tablo. Ayrıntılar için mw.site.namespaces bölümüne bakın.

mw.site.talkNamespaces

Numaraya göre dizinlenmiş yalnızca tartışma ad alanlarını tutan tablo. Ayrıntılar için mw.site.namespaces bölümüne bakın.

mw.site.stats

Site istatistikleri tutan tablo. Mevcut istatistikler:

  • pages: Vikideki sayfa sayısı.
  • articles: Vikideki madde sayısı.
  • files: Vikideki dosya sayısı.
  • edits: Vikideki düzenleme sayısı.
  • users: Vikideki kullanıcı sayısı.
  • activeUsers: Vikideki etkin kullanıcı sayısı.
  • admins: Vikideki 'sysop' grubundaki kullanıcı sayısı.

mw.site.stats.pagesInCategory

mw.site.stats.pagesInCategory( category, which )

Bu işlev pahalıdır

Kategori hakkında istatistik alır. which belirtilmemişse, nil veya "*", aşağıdaki özelliklere sahip bir tablo döndürür:

  • all: Toplam sayfalar, dosyalar ve alt kategoriler.
  • subcats: Alt kategori sayısı.
  • files: Dosya sayısı.
  • pages: Sayfa sayısı.

Yukarıdaki kodlardan which ise, bunun yerine yalnızca karşılık gelen değer döndürülür.

Sorgulanan her yeni kategori, pahalı işlev sayısını artıracaktır.

mw.site.stats.pagesInNamespace

mw.site.stats.pagesInNamespace( ns )

Belirtilen ad alanındaki sayfa sayısını döndürür (sayıya göre belirtin).

mw.site.stats.usersInGroup

mw.site.stats.usersInGroup( group )

Belirli bir gruptaki kullanıcı sayısını döndürür.

mw.site.interwikiMap

mw.site.interwikiMap( filter )

Kullanılabilir vikiarası önekleriyle ilgili verileri tutan bir tablo döndürür. filter "local" dizesiyse, yalnızca yerel interwiki öneklerine ilişkin veriler döndürülür. filter "!local" dizesidirse, yalnızca yerel olmayan önekler için veriler döndürülür. Hiçbir filtre belirtilmezse, tüm öneklerin verileri döndürülür. Bu bağlamdaki "local" önek aynı proje için olan önektir. Örneğin, İngilizce Vikipedi'de diğer dil Vikipedi'leri yerel kabul edilirken Vikisözlük vb.

Bu işlev tarafından döndürülen tablodaki anahtarlar vikiarası önekleridir ve değerler aşağıdaki özelliklere sahip alt tablolardır:

  • prefix - vikiarası öneki.
  • url - vikiarasının işaret ettiği URL. Sayfa adı $1 parametresi ile temsil edilir.
  • isProtocolRelative - URL'nin protokole bağlı olup olmadığını gösteren bir boole.
  • isLocal - URL'nin geçerli projedeki bir site için olup olmadığı.
  • isCurrentWiki - URL'nin geçerli viki için olup olmadığı.
  • isTranscludable - bu vikiarsaı önekini kullanan sayfaların yansıtabilir olup olmadığı. Bunun için Wikimedia vikilerinde devre dışı bırakılmış olan yansıtma gerekir.
  • isExtraLanguageLink - vikiarasının $wgExtraInterlanguageLinkPrefixes içinde listelenip listelenmediği.
  • displayText - $wgExtraInterlanguageLinkPrefixes içinde listelenen bağlantılar için bu, diller arası bağlantı için gösterilen görüntüleme metnidir. Belirtilmemişse Nil.
  • tooltip - $wgExtraInterlanguageLinkPrefixes içinde listelenen bağlantılar için, bu, kullanıcılar diller arası bağlantısının üzerine geldiğinde gösterilen ipucu metnidir. Belirtilmemişse Nil.

Metin kütüphanesi

Metin kitaplığı, Dize kütüphanesi ve Ustring kütüphanesinde eksik olan bazı yaygın metin işleme işlevleri sağlar. Bu işlevler UTF-8 dizeleriyle kullanım için güvenlidir.

mw.text.decode

mw.text.decode( s )
mw.text.decode( s, decodeNamedEntities )

Dizedeki HTML varlıkları öğesini karşılık gelen karakterlerle değiştirir.

Boole decodeNamedEntities atlanır veya yanlışsa, tanınan yalnızca adlandırılan varlıklar '&lt;', '&gt;', '&amp;', '&quot;' ve '&nbsp;'. Aksi takdirde, tanınacak HTML5 adlı varlıkların listesi PHP'nin get_html_translation_table işlevinden yüklenir.

mw.text.encode

mw.text.encode( s )
mw.text.encode( s, charset )

Bir dizedeki karakterleri HTML varlıkları ile değiştirir. '<', '>', '&', '"' karakterleri ve kesilmeyen boşluk uygun adlandırılmış varlıklarla değiştirilir; diğerlerinin tümü sayısal varlıklarla değiştirilir.

charset sağlanırsa, Ustring deseni, yani [set] içindeki "set" içine parantez içine girmek için uygun bir dize olmalıdır. Varsayılan karakter kümesi '<>&"\' ' şeklindedir (sondaki boşluk kırılmaz boşluktur, U+00A0).

mw.text.jsonDecode

mw.text.jsonDecode( s )
mw.text.jsonDecode( s, flags )

Bir JSON dizesinin kodunu çözer. flags 0 veya mw.text.JSON_PRESERVE_KEYS ve mw.text.JSON_PRESERVE_KEYS bayraklarının bir kombinasyonudur (+ kullanın).

Normalde JSON'un sıfır tabanlı dizileri, Lua tek tabanlı dizi tablolarına yeniden numaralandırılır; bunu önlemek için mw.text.JSON_PRESERVE_KEYS iletin.

JSON'da dizilerde veya nesnelerde terminal virgülünün olmaması gibi belirli gereksinimleri gevşetmek için mw.text.JSON_TRY_FIXING iletin. Bu önerilmez.

Sınırlamalar:

  • Dizi null değerler içeriyorsa, kodu çözülmüş JSON dizileri Lua dizileri olmayabilir.
  • JSON nesneleri null değerlere sahip anahtarları bırakacaktır.
  • Girişin bir JSON dizisi mi yoksa sıralı tamsayı tuşlarına sahip bir JSON nesnesi mi olduğunu doğrudan söylemek mümkün değildir.
  • 1 ile başlayan sıralı tamsayı anahtarlarına sahip bir JSON nesnesi, mw.text.JSON_PRESERVE_KEYS kullanılmadığı sürece, eşdeğer olmamasına rağmen, aynı değerlere sahip bir JSON dizisiyle aynı tablo yapısının kodunu çözecektir.

mw.text.jsonEncode

mw.text.jsonEncode( value )
mw.text.jsonEncode( value, flags )

Bir JSON dizesini kodlayın. Aktarılan değer JSON'da kodlanamazsa hatalar artar. flags 0 veya mw.text.JSON_PRESERVE_KEYS ve mw.text.JSON_PRETTY işaretlerinin bir kombinasyonudur (+ kullanın).

Normalde Lua tek tabanlı dizi tabloları JSON sıfır tabanlı diziler olarak kodlanır; flags, mw.text.JSON_PRESERVE_KEYS ayarlandığında, sıfır tabanlı sıra tabloları JSON dizileri olarak kodlanır.

Sınırlamalar:

  • Boş tablolar, boş nesneler ({}) olarak değil, her zaman boş diziler ([]) olarak kodlanır.
  • Sekans tabloları, "dummy" bir öğe eklenmeden JSON nesneleri olarak kodlanamaz.
  • Nil değerlerine sahip nesneler veya diziler üretmek için, __pairs meta yönteminin zor bir şekilde uygulanması gerekir.
  • mw.text.JSON_PRESERVE_KEYS kullanılmadığı sürece, 0 ile başlayan sıralı tamsayı tuşlarına sahip bir Lua tablosu JSON dizisi olarak kodlanır, 1 ile başlayan tamsayı tuşlarına sahip bir Lua tablosu ile kodlanır.
  • Aynı sayıdaki anahtarlar olarak hem sayı hem de dize temsili anahtar olarak kullanıldığında, davranış belirtilmez.

mw.text.killMarkers

mw.text.killMarkers( s )

Bir dizeden tüm MediaWiki şerit işaretleyici öğelerini kaldırır.

mw.text.listToText

mw.text.listToText( list )
mw.text.listToText( list, separator, conjunction )

Düzyazı tarzı bir listeye katılır. Başka bir deyişle, table.concat() gibi ancak son öğeden önce farklı bir ayırıcı ile.

Varsayılan ayırıcı, vikinin içerik dilinde MediaWiki:comma-separator üzerinden alınır ve varsayılan bağlaç MediaWiki:and ile MediaWiki:word-separator birleştirilir.

Mesajlar için varsayılan değerleri kullanan örnekler:

 -- Boş dizeyi döndürür
 mw.text.listToText( {} )
 
 -- "1" döndürür
 mw.text.listToText( { 1 } )
 
 -- "1 ve 2" döndürür
 mw.text.listToText( { 1, 2 } )
 
 -- "1, 2, 3, 4 ve 5" döndürür
 mw.text.listToText( { 1, 2, 3, 4, 5 } )
 
 -- "1; 2; 3; 4 veya 5" döndürür
 mw.text.listToText( { 1, 2, 3, 4, 5 }, '; ', ' or ' )

mw.text.nowiki

mw.text.nowiki( s )

Vikimetin olarak yorumlanmasını önlemek için dizedeki çeşitli karakterleri HTML varlıkları ile değiştirir. Bu içerir:

  • Aşağıdaki karakterler: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}'
  • Dizenin başlangıcında veya yeni satırdan hemen sonra şu karakterler: '#', '*', ':', ';', space, tab ('\t')
  • Boş satırlarda ilişkili satırsonu veya satır başı karakterlerinden biri kaçmış olacak
  • "----" dizenin başlangıcında veya yeni satırdan hemen sonra ilk '-' karakteri
  • "__" bir alt çizgi kaçacak
  • "://" iki nokta kaçacak
  • "ISBN", "RFC" veya "PMID" ifadesini izleyen bir boşluk karakteri önlenecek

mw.text.split

mw.text.split( s, pattern, plain )

Dizeyi Ustring deseni pattern ile eşleşen sınırlarda alt dizelere böler. plain belirtilir ve true olursa, pattern, bir Lua deseninden ziyade değişmez bir dize olarak yorumlanır (tıpkı mw.ustring.find() gibi). Alt dizeleri içeren bir tablo döndürür.

Örneğin, mw.text.split( 'a b\tc\nd', '%s' ) bir tabloya { 'a', 'b', 'c', 'd' } döndürür.

pattern boş dizeyle eşleşirse, s tek tek karakterlere bölünür.

mw.text.gsplit

mw.text.gsplit( s, pattern, plain )

mw.text.split() öğesine eşdeğer çağrı ile döndürülecek alt dizeler üzerinde yinelenecek bir iterator işlevi döndürür.

mw.text.tag

mw.text.tag( name, attrs, content )
mw.text.tag{ name = string, attrs = table, content = string|false }

Adlı argümanlar kullanımına dikkat edin.

name için HTML tarzı bir etiket oluşturur.

attrs verilirse, dize tuşlarına sahip bir tablo olmalıdır. Dize ve sayı değerleri, özniteliğin değeri olarak kullanılır; anahtarın HTML5 değersiz parametresi olarak çıktığı boolean true sonuçları; boolean false anahtarı tamamen atlar; ve her şey bir hatadır.

content verilmemişse (veya sıfırsa), yalnızca açılış etiketi döndürülür. content boole false ise, kendi kendine kapalı bir etiket döndürülür. Aksi takdirde, bir dize veya sayı olmalıdır, bu durumda içerik oluşturulmuş açılış ve kapanış etiketine eklenir. İçeriğin otomatik olarak HTML kodlu olmadığını unutmayın; gerekirse mw.text.encode() kullanın.

<ref> gibi uzantı etiketlerini düzgün bir şekilde döndürmek için bunun yerine frame:extensionTag() kullanın.

mw.text.trim

mw.text.trim( s )
mw.text.trim( s, charset )

Bir dizenin başından ve sonundan boşluk veya diğer karakterleri kaldırın.

charset sağlanırsa, Ustring deseni, yani [set] içindeki "set" içine parantez içine girmek için uygun bir dize olmalıdır. Varsayılan karakter kümesi ASCII boşluk, "\t\r\n\f ".

mw.text.truncate

mw.text.truncate( text, length )
mw.text.truncate( text, length, ellipsis )
mw.text.truncate( text, length, ellipsis, adjustLength )

text belirtilen uzunluğa göre keser ve kesme işlemi yapılırsa ellipsis ekler. Uzunluk pozitifse, dizenin sonu kesilir; negatif olursa, başlangıç kaldırılır. adjustLength verilir ve true olursa, üç nokta içeren sonuç dizesi belirtilen uzunluktan daha uzun olmaz.

ellipsis için varsayılan değer, vikinin içerik dilinde MediaWiki:ellipsis üzerinden alınır.

Varsayılan "..." üç nokta kullanan örnekler:

-- "foobarbaz" döndürür
mw.text.truncate( "foobarbaz", 9 )

-- "fooba..." döndürür
mw.text.truncate( "foobarbaz", 5 )

-- "...arbaz" döndürür
mw.text.truncate( "foobarbaz", -5 )

-- "foo..." döndürür
mw.text.truncate( "foobarbaz", 6, nil, true )

-- "Foobarbaz" döndürür, çünkü bu "foobarba..." daha da kısadır
mw.text.truncate( "foobarbaz", 8 )

mw.text.unstripNoWiki

mw.text.unstripNoWiki( s )

MediaWiki <nowiki> şerit işaretleyicileri karşılık gelen metinle değiştirir. Diğer şerit işaretleyici tipleri değiştirilmez.

mw.text.unstrip

mw.text.unstrip( s )

mw.text.killMarkers( mw.text.unstripNoWiki( s ) ) ile eşittir.

Bu, artık Scribunto'nun önceki sürümlerinde olduğu gibi özel sayfa eklenmesi, <ref> etiketlerinin ve arkasındaki HTML'yi göstermez.

Başlık kütüphanesi

mw.title.equals

mw.title.equals( a, b )

İki başlığın eşit olup olmadığını test edin. Parçaların karşılaştırmada göz ardı edildiğine dikkat edin.

mw.title.compare

mw.title.compare( a, b )

a başlığının b başlığından daha küçük, eşit veya daha büyük olduğunu belirtmek için -1, 0 veya 1 değerini döndürür.

Bu, başlıkları vikiarası önekiyle (varsa) dize olarak, daha sonra ad alanı numarasına, ardından önceden düzeltilmemiş başlık metnine bir dize olarak karşılaştırır. Bu dize karşılaştırmaları Lua'nın standart < operatörünü kullanır.

mw.title.getCurrentTitle

mw.title.getCurrentTitle()

Geçerli sayfanın başlık nesnesini döndürür.

mw.title.new

mw.title.new( text, namespace )
mw.title.new( id )

Bu işlev, bir kimlikle çağrıldığında pahalı

Yeni bir başlık nesnesi oluşturur.

Bir id numarası verilirse, o page_id değerine sahip başlık için bir nesne oluşturulur. Başvurulan başlık, geçerli sayfadan bağlantı olarak sayılır. Page_id yoksa nil döndürür. Oluşturulan başlık nesnesi önceden yüklenmiş bir başlık için değilse, pahalı işlev sayısı artırılır.

Bunun yerine bir text dizesi verilirse, o başlık için bir nesne oluşturulur (sayfa olmasa bile). Metin dizesi bir ad alanı belirtmezse, namespace (mw.site.namespaces içinde bulunan herhangi bir anahtar olabilir). Metin geçerli bir başlık değilse, nil döndürülür.

mw.title.makeTitle

mw.title.makeTitle( namespace, title, fragment, interwiki )

namespace ad alanında title başlıklı, isteğe bağlı olarak belirtilen fragment ve interwiki önekiyle başlık nesnesi oluşturur. namespace, mw.site.namespaces içinde bulunan herhangi bir anahtar olabilir. Ortaya çıkan başlık geçerli değilse, nil değerini döndürür.

$nw_title_new_function işlevinden farklı olarak, bu yöntemin her zaman belirtilen ad alanını uygulayacağını unutmayın. Örneğin, mw.title.makeTitle( 'Template', 'Module:Foo' ), sayfa için bir nesne oluşturur Template:Module:Foo, mw.title.new( 'Module:Foo', 'Template' ) ise Module:Foo için bir nesne oluşturur.

Başlık nesneleri

Bir başlık nesnesinin birçok özelliği ve yöntemi vardır. Özelliklerin çoğu salt okunurdur.

text ile biten alanların başlıkları dize değeri olarak döndürdüğünü, title ile biten alanların ise başlık nesnelerini döndürdüğünü unutmayın.

  • id: page_id. Sayfa yoksa 0. Bu pahalı olabilir.
  • interwiki: Vikiarası öneki veya yoksa boş dize.
  • namespace: Ad alanı numarası.
  • fragment: Parça veya boş dize. Atanabilir.
  • nsText: Sayfanın ad alanının metni.
  • subjectNsText: Sayfanın konu ad alanının metni.
  • text: Ad alanı veya vikiarası önekleri olmadan sayfanın başlığı.
  • prefixedText: Ad alanı ve vikiarası önekleriyle sayfanın başlığı.
  • fullText: Sayfanın ad alanı ve vikiarsaı önekleri ve parçasını içeren başlığı. Akıma eşitse vikiarası döndürülmez.
  • rootText: Bu bir alt sayfa ise, önek içermeyen kök sayfanın başlığı. Aksi takdirde, title.text ile aynı.
  • baseText: Bu bir alt sayfasa, sayfanın başlığı önek içermeyen bir alt sayfadır. Aksi takdirde, title.text ile aynı.
  • subpageText: Bu bir alt sayfasa, yalnızca alt sayfa adıdır. Aksi takdirde, title.text ile aynı.
  • canTalk: Bu başlık için sayfanın bir konuşma sayfası olup olmadığı.
  • exists: Sayfanın mevcut olup olmadığı. Medya ad alanı başlıkları için file.exists için diğer ad. Dosya ad alanı başlıkları için, dosyanın kendisi değil dosya açıklaması sayfasının varlığını kontrol eder. Bu pahalı olabilir.
  • file, fileExists: Aşağıdaki ##File metadata bölümüne bakın.
  • isContentPage: Bu başlığın bir içerik ad alanında olup olmadığı.
  • isExternal: Bu başlığın vikiarası öneki olup olmadığı.
  • isLocal: Bu başlığın bu projede olup olmadığı. Örneğin, Vikipedi ve benzeri olmayan diğer Vikipedi'de diğer Vikisözkük "yerel" kabul edilir.
  • isRedirect: Bunun bir yönlendirme olan bir sayfanın başlığı olup olmadığı. Bu pahalı olabilir.
  • isSpecialPage: Bunun olası bir özel sayfanın başlığı olup olmadığı (yani Özel: ad alanındaki bir sayfa).
  • isSubpage: Bu başlığın başka bir başlığın bir alt sayfası olup olmadığı.
  • isTalkPage: Bunun bir tartışma sayfasının başlığı olup olmadığı.
  • isSubpageOf( title2 ): Bu başlığın verilen başlığın bir alt sayfası olup olmadığı.
  • inNamespace( ns ): Bu başlığın belirtilen ad alanında olup olmadığı. Ad alanları, mw.site.namespaces içinde bulunan bir anahtar olan herhangi bir şeyle belirtilebilir.
  • inNamespaces( ... ): Bu başlığın verilen ad alanlarından herhangi birinde olup olmadığı. Ad alanları, mw.site.namespaces içinde bulunan bir anahtar olan herhangi bir şeyle belirtilebilir.
  • hasSubjectNamespace( ns ): Bu başlığın konu ad alanının verilen ad alanında olup olmadığı. Ad alanları, mw.site.namespaces içinde bulunan bir anahtar olan herhangi bir şeyle belirtilebilir.
  • contentModel: Dize olarak bu başlığın içerik modeli. Bu pahalı olabilir.
  • basePageTitle: mw.title.makeTitle( title.namespace, title.baseText ) ile aynı.
  • rootPageTitle: mw.title.makeTitle( title.namespace, title.rootText ) ile aynı.
  • talkPageTitle: mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text ) ile aynı, veya bu başlığın tartışma sayfası yoksa nil.
  • subjectPageTitle: mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text ) ile aynı.
  • redirectTarget: Sayfa bir yönlendirme ise ve sayfa varsa yönlendirme sayfasının hedefinin bir başlık nesnesini döndürür, aksi takdirde false değerini döndürür.
  • protectionLevels: Sayfanın koruma düzeyleri. Bu, her eyleme karşılık gelen tuşları içeren bir tablodur (örneğin, "düzenle" ve "taşı"). Tablo değerleri, ilk öğesi koruma düzeyini içeren bir dize olan dizilerdir. Sayfa korumasızsa, tablo değerleri veya dizi öğeleri sıfır olur. Bu pahalı.
  • cascadingProtection: Sayfa için geçerli olan basamaklı korumalar. Bu, "kısıtlamalar" (kendisinin korumaDüzeleri gibi anahtarları olan bir tablo) ve "kaynaklar" (korumaların basamaklandığı bir dizi listeleme başlığı) içeren bir tablodur. Sayfada herhangi bir koruma basamaklandırılmazsa, "kısıtlamalar" ve "kaynaklar" boş olur. Bu pahalı.
  • subPageTitle( text ): mw.title.makeTitle( title.namespace, title.text .. '/' .. text ) ile aynı.
  • partialUrl(): URL'de olduğu gibi kodlanmış title.text değerini döndürür.
  • fullUrl( query, proto ): Bu başlık için tam URL'yi (isteğe bağlı sorgu tablosu / dizesiyle birlikte) döndürür. Sonuçta ortaya çıkan url'nin şemasını kontrol etmek için proto belirtilebilir: "http", "https", "relative" (varsayılan) veya "canonical".
  • localUrl( query ): Bu başlık için yerel URL'yi (isteğe bağlı sorgu tablosu/dizesiyle birlikte) döndürür.
  • canonicalUrl( query ): Bu başlık için standart URL'yi (isteğe bağlı sorgu tablosu/dizesiyle birlikte) döndürür.
  • getContent(): Sayfanın (ayrıştırılmamış) içeriğini veya sayfa yoksa nil değerini döndürür. Sayfa bir yansıtma olarak kaydedilecektir.

Başlık nesneleri ilişkisel işleçler kullanılarak karşılaştırılabilir. tostring( title ), title.prefixedText değerini döndürür.

İnsanlar gerçeği şaşırtıcı bulduklarından, bir başlık nesnesindeki pahalı alanına erişmenin sayfaya bir "bağlantı" kaydettiğini unutmayın (örneğin Special:WhatLinksHere sayfasında gösterildiği gibi). Başlık nesnesinin getContent() yöntemini kullanarak veya redirectTarget alanına erişerek, bunu "dönüştürülme" olarak kaydeder ve başlık nesnesinin file veya fileExists alanları bunu "dosya bağlantısı" olarak kaydeder.

Dosya meta verileri

Dosya veya Medya ad alanındaki bir sayfayı temsil eden başlık nesnelerinin file adlı bir özelliği olacaktır. Bu pahalı. Bu, aşağıdaki gibi yapılandırılmış bir tablodur:

  • exists: Dosyanın var olup olmadığı. Bir görüntü kullanımı olarak kaydedilecektir. Title nesnesindeki fileExists özelliği, geriye dönük uyumluluk nedeniyle vardır ve bu özelliğin diğer adıdır. Bu yanlışsa, diğer tüm dosya özellikleri sıfır olacaktır.
  • width: Dosyanın genişliği. Dosya birden fazla sayfa içeriyorsa, bu ilk sayfanın genişliğidir.
  • height: Dosyanın yüksekliği. Dosya birden fazla sayfa içeriyorsa, bu ilk sayfanın yüksekliğidir.
  • pages: Dosya biçimi birden çok sayfayı destekliyorsa, bu dosyanın her sayfası için tablolar içeren bir tablodur; aksi takdirde sıfırdır. #operator, dosyadaki sayfa sayısını almak için kullanılabilir. Her bir sayfa tablosu bir width ve height özelliği içerir.
  • size: Dosyanın bayt cinsinden boyutu.
  • mimeType: Dosyanın MIME türü.
Pahalı özellikler

id, isRedirect, exist ve contentModel özellikleri veritabanından başlık hakkında veri alınmasını gerektirir. Bu nedenle, pahalı işlev sayısı, geçerli sayfadan başka bir sayfa için bunlardan birine ilk kez erişildiğinde artırılır. Bu sayfa için bu özelliklerin herhangi birine daha sonra erişilmesi, pahalı işlev sayısını tekrar artırmaz.

Pahalı olarak işaretlenen diğer özellikler, geçerli sayfadan başka bir sayfa için ilk kez erişildiğinde pahalı işlev sayısını her zaman artırır.

URI kütüphanesi

mw.uri.encode

mw.uri.encode( s, enctype )

Dizenin yüzde kodunu çözer. Varsayılan tür olan "QUERY", sorgu dizelerinde kullanmak için '+' kullanarak boşlukları kodlar; "PATH" boşlukları %20 olarak kodlar; ve "WIKI" boşlukları '_' olarak kodlar.

Hem boşluk hem de alt çizgi '_' olarak kodlandığından "WIKI" biçiminin tamamen geri alınamayacağını unutmayın.

mw.uri.decode

mw.uri.decode( s, enctype )

Dizenin yüzde kodunu çözer. Varsayılan tür olan "QUERY", '+' kodunu boşluğa çözer; "PATH" herhangi bir kod çözme işlemi gerçekleştirmez; ve "WIKI" '_' karakterini boşluğa çözer.

mw.uri.anchorEncode

mw.uri.anchorEncode( s )

Bir dizeyi MediaWiki URI parçasında kullanmak için kodlar.

mw.uri.buildQueryString

mw.uri.buildQueryString( table )

Bir tabloyu URI sorgu dizesi olarak kodlar. Anahtarlar dize olmalıdır; değerler, dizeler veya sayılar, sekans tabloları veya boolean false olabilir.

mw.uri.parseQueryString

mw.uri.parseQueryString( s, i, j )

s sorgu dizesini bir tabloya çözer. Dizede değer içermeyen anahtarların değeri false olur; birden çok kez yinelenen tuşlar, değer olarak sıra tablolarına sahip olacaktır; ve diğerleri değer olarak dizgilere sahip olacaktır.

İsteğe bağlı i ve j sayısal bağımsız değişkenleri, dizenin tamamı yerine ayrıştırılacak s alt dizesini belirtmek için kullanılabilir. i, alt dizenin ilk karakterinin konumudur ve varsayılan değer 1'dir. j, alt dizenin son karakterinin konumudur ve varsayılan olarak alt dizenin uzunluğudur. Hem i hem de j, string.sub gibi negatif olabilir.

mw.uri.canonicalUrl

mw.uri.canonicalUrl( page, query )

İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanın standart URL'si için URI nesnesi döndürür.

mw.uri.fullUrl

mw.uri.fullUrl( page, query )

İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanın tam URL'si için URI nesnesi döndürür.

mw.uri.localUrl

mw.uri.localUrl( page, query )

İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanın yerel URL'si için URI nesnesi döndürür.

mw.uri.new

mw.uri.new( s )

Geçirilen dize veya tablo için yeni bir URI nesnesi oluşturur. Tablodaki olası alanlar için URI nesnelerinin açıklamasına bakın.

mw.uri.validate

mw.uri.validate( table )

İletilen tabloyu (veya URI nesnesini) doğrular. Tablonun geçerli olup olmadığını gösteren bir boole ve başarısızlık durumunda hangi sorunların bulunduğunu açıklayan bir dize döndürür.

URI nesnesi

URI nesnesi, bazıları veya tümü sıfır olabilecek aşağıdaki alanlara sahiptir:

  • protocol: Dize protokolü/şeması
  • user: Dize kullanıcısı
  • password: Dize parolası
  • host: Dize ana bilgisayar adı
  • port: Tamsayı bağlantı noktası
  • path: Dize yolu
  • query: mw.uri.parseQueryString olduğu gibi bir tablo
  • fragment: Dize parçası.

Aşağıdaki özellikler de mevcuttur:

  • userInfo: Dize kullanıcı ve parola
  • hostPort: Dize ana makinesi ve bağlantı noktası
  • authority: Dize kullanıcısı, parola, ana bilgisayar ve bağlantı noktası
  • queryString: Sorgu tablosunun dize sürümü
  • relativePath: Dize yolu, sorgu dizesi ve parçası

tostring() URI dizesini verecektir.

URI nesnesinin yöntemleri şunlardır:

mw.uri:parse

uri:parse( s )

Bir dizeyi geçerli URI nesnesine ayrıştırır. Dizede belirtilen tüm alanlar geçerli nesnede değiştirilir; belirtilmeyen alanlar eski değerlerini korur.

mw.uri:clone

uri:clone()

URI nesnesinin bir kopyasını oluşturur.

mw.uri:extend

uri:extend( parameters )

Parametreler tablosunu, nesnenin sorgu tablosuyla birleştirir.

Ustring kütüphanesi

Ustring kütüphanesinin standart Dize kütüphanesinin doğrudan yeniden uygulanması olması amaçlanmıştır, ancak yöntemler baytlar yerine UTF-8 kodlu dizelerdeki karakterler üzerinde çalışır.

Dize geçerli UTF-8 değilse çoğu işlev bir hata oluşturur; istisnalar not edilir.

mw.ustring.maxPatternLength

Bir desenin izin verilen maksimum uzunluğu bayt olarak.

mw.ustring.maxStringLength

Bir dizenin izin verilen maksimum uzunluğu bayt olarak.

mw.ustring.byte

mw.ustring.byte( s, i, j )

Tek tek baytları döndürür; string.byte() ile aynı.

mw.ustring.byteoffset

mw.ustring.byteoffset( s, l, i )

Dizedeki bir karakterin bayt uzaklığını döndürür. Hem l hem de i için varsayılan değer 1'dir. i negatif olabilir, bu durumda dizenin sonundan itibaren sayılır.

l == 1'deki karakter, i baytında veya sonrasında başlayan ilk karakterdir; l == 0'daki karakter, i baytından veya bu bayttan önce başlayan ilk karakterdir. Bu aynı karakter olabilir. Büyük veya küçük l değerleri bunlara göre hesaplanır.

mw.ustring.char

mw.ustring.char( ... )

Tam sayıların bayt değerleri yerine Unicode kod noktaları olması dışında string.char() gibi.

local value = mw.ustring.char( 0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x21 ) -- değer şimdi 'Привет!'

mw.ustring.codepoint

mw.ustring.codepoint( s, i, j )

string.byte() gibi, ancak dönüş değerleri kod noktaları ve ofsetler bayt yerine karakterler olmalıdır.

mw.ustring.find

mw.ustring.find( s, pattern, init, plain )

Desenin Ustring patterns de açıklandığı gibi genişletilmesi ve init ofsetinin bayt yerine karakterlerde olması dışında string.find() gibi.

mw.ustring.format

mw.ustring.format( format, ... )

string.format() ile aynı. Dizelerin genişlikleri ve kesinlikleri kod noktaları değil bayt cinsinden ifade edilir.

mw.ustring.gcodepoint

mw.ustring.gcodepoint( s, i, j )

Dizedeki kod noktaları üzerinden yineleme yapmak için üç değer döndürür. i varsayılan olarak 1 ve j -1 olur. Bu, iterator for da kullanılmak üzere tasarlanmıştır:

for codepoint in mw.ustring.gcodepoint( s ) do
     -- block
end

mw.ustring.gmatch

mw.ustring.gmatch( s, pattern )

Desenin Ustring patterns bölümünde açıklandığı gibi genişletilmesi dışında string.gmatch() gibi.

mw.ustring.gsub

mw.ustring.gsub( s, pattern, repl, n )

Desenin Ustring desenler de açıklandığı gibi genişletilmesi dışında string.gsub() gibi.

mw.ustring.isutf8

mw.ustring.isutf8( s )

Dize geçerli UTF-8 ise true, değilse false döndürür.

mw.ustring.len

mw.ustring.len( s )

Dizenin kod noktalarındaki uzunluğunu veya dize geçerli UTF-8 değilse nil değerini döndürür.

Kod noktaları yerine bayt uzunluğu kullanan benzer bir işlev için string.len() öğesine bakın.

mw.ustring.lower

mw.ustring.lower( s )

string.lower() çok benzer, tek fark Unicode'da küçük harfli, büyük harfli tanımlara sahip tüm karakterlerin dönüştürülmesidir.

Dil kütüphanesi de yüklüyse, bunun yerine varsayılan dil nesnesinde lc() çağrılır.

mw.ustring.match

mw.ustring.match( s, pattern, init )

Desenin Ustring i de açıklandığı gibi genişletilmesi ve init ofsetinin bayt yerine karakterlerde olması dışında string.match() gibi.

mw.ustring.rep

mw.ustring.rep( s, n )

string.rep() ile aynı.

mw.ustring.sub

mw.ustring.sub( s, i, j )

Ofsetlerin bayt yerine karakter olması dışında string.sub() gibi.

mw.ustring.toNFC

mw.ustring.toNFC( s )

Dizeyi Normalleştirme Formu C'ye dönüştürür. Dize geçerli UTF-8 değilse nil değerini döndürür.

mw.ustring.toNFD

mw.ustring.toNFD( s )

Dizeyi Normalleştirme Formu D'ye dönüştürür. Dize geçerli UTF-8 değilse nil değerini döndürür.

mw.ustring.upper

mw.ustring.upper( s )

string.upper () gibi, tek fark Unicode'da büyük harfli, küçük harfli tanımlara sahip tüm karakterlerin dönüştürülmesidir.

Dil kütüphanesi de yüklüyse, bunun yerine varsayılan dil nesnesinde uc() çağrılır.

Ustring modelleri

Ustring işlevlerindeki desenler Dize kitaplığı kalıpları ile aynı sözdizimini kullanır. En büyük fark karakter sınıflarının Unicode karakter özellikleri açısından yeniden tanımlanmasıdır:

  • %a: Genel Kategori "Harf" olan tüm karakterleri temsil eder.
  • %c: Genel Kategori "Kontrol" olan tüm karakterleri temsil eder.
  • %d: "Sayı, ondalık basamak" Genel Kategorisine sahip tüm karakterleri temsil eder.
  • %l: "Küçük Harf" Genel Kategorisi olan tüm karakterleri temsil eder.
  • %p: Genel Kategori "Noktalama İşaretleri" olan tüm karakterleri temsil eder.
  • %s: Genel Kategori "Ayırıcı", artı sekme, satır besleme, satır başı, dikey sekme ve form beslemeli tüm karakterleri temsil eder.
  • %u: "Büyük Harf" Genel Kategorisi olan tüm karakterleri temsil eder.
  • %w: "Harf" veya "Ondalık Sayı" Genel Kategorisine sahip tüm karakterleri temsil eder.
  • %x: onaltılık basamakların tam genişlikli karakter sürümlerini ekler.

Dize kitaplığı kalıpları da olduğu gibi, burada %A, %C, %D, %L, %P, %S, %U ve %W tamamlayıcı kümeyi temsil eder ("Genel Kategori olmadan tüm karakterler").

Her durumda, karakterler bayt yerine Unicode karakterler olarak yorumlanır, bu nedenle [0-9] gibi aralıklar, %b«» gibi kalıplar ve çok baytlı karakterler düzgün çalışacaktır. Boş yakalamalar konumu bayt yerine kod noktalarında yakalar.

Yüklenebilir kütüphaneler

Bu kitaplıklar varsayılan olarak dahil edilmemiştir, ancak gerekirse require() kullanılarak yüklenebilir.

bit32

Lua 5.2 bit32 kütüphanesinin bu öykünmesi kullanılarak yüklenebilir

bit32 = require( 'bit32' )

Bit32 kitaplığı, işaretsiz 32 bit tamsayılarda bitsel işlem sağlar. Giriş sayıları tamsayılara (belirtilmemiş bir şekilde) ve indirgenmiş modü 2 32 olarak kesilir, böylece değer 0 ila 2 32 the1 aralığındadır; dönüş değerleri de bu aralıktadır.

Bitler numaralandırıldığında (bit32.extract() gibi), 0 en küçük anlamlı bittir (2 0 değerine sahip olan) ve 31 en anlamlı olanıdır (değeri 2 olan 31).

bit32.band

bit32.band( ... )

Bağımsız değişkenlerinin bitwise AND değerini döndürür: sonuç yalnızca bu bit tüm bağımsız değişkenlerde ayarlanmışsa bir bit kümesine sahiptir.

Sıfır bağımsız değişkenleri verilirse, sonuçta tüm bitler ayarlanır.

bit32.bnot

bit32.bnot( x )

x öğesinin bitwise tamamlayıcı döndürür.

bit32.bor

bit32.bor( ... )

Bağımsız değişkenlerinin bitwise OR değerini döndürür: bu bit, bağımsız değişkenlerden herhangi birinde ayarlanmışsa, sonucun bir bit ayarı vardır.

Sıfır argümanları verilirse, sonuç tüm bitleri temizler.

bit32.btest

bit32.btest( ... )

bit32.band( ... ) ~= 0 ile eşittir

bit32.bxor

bit32.bxor( ... )

Bağımsız değişkenlerinin bitwise XOR değerini döndürür: bu bit, bağımsız değişkenlerin tek bir sayısında ayarlanırsa, sonucun bir bit ayarı vardır.

Sıfır argümanları verilirse, sonuç tüm bitleri temizler.

bit32.extract

bit32.extract( n, field, width )

field bitinden başlayarak n öğesinden width bitlerini ayıklar. 0 ile 31 aralığının dışındaki bitlere erişmek bir hatadır.

Belirtilmezse, width için varsayılan değer 1'dir.

bit32.replace

bit32.replace( n, v, field, width )

n içindeki width bitlerini field bit ile başlayarak v düşük width bitleriyle değiştirir. 0 ile 31 aralığının dışındaki bitlere erişmek bir hatadır.

Belirtilmezse, width için varsayılan değer 1'dir.

bit32.lshift

bit32.lshift( n, disp )

n kaydırılmış disp bitlerini sola döndürür. Bu bir mantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2 disp ile bölünmeye eşdeğerdir.

31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.

bit32.rshift

bit32.rshift( n, disp )

n kaydırılmış disp bitlerini sağa döndürür. Bu bir mantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2 disp ile bölünmeye eşdeğerdir.

31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.

bit32.arshift

bit32.arshift( n, disp )

n kaydırılan disp bit sayısını sağa döndürür. Bu bir aritmetik kaydırma: disp pozitifse, eklenen bitler orijinal sayıdaki bit 31 ile aynı olacaktır.

31'in üzerinde yer değiştirmenin 0 veya 4294967295 ile sonuçlanacağını unutmayın.

bit32.lrotate

bit32.lrotate( n, disp )

n döndürülmüş disp bitlerini sola döndürür.

Dönüşlerin eşdeğer modulo 32 olduğuna dikkat edin: 32 dönüşü 0 dönüşüyle aynıdır, 33, 1 ile aynıdır vb.

bit32.rrotate

bit32.rrotate( n, disp )

n döndürülmüş disp bitlerini sağa döndürür.

Dönüşlerin eşdeğer modulo 32 olduğuna dikkat edin: 32 dönüşü 0 dönüşüyle aynıdır, 33, 1 ile aynıdır vb.

libraryUtil

Bu kütüphane, Scribunto kütüphanelerini uygularken faydalı yöntemler içerir. Kullanılarak yüklenebilir

libraryUtil = require( 'libraryUtil' )

libraryUtil.checkType

libraryUtil.checkType( name, argIdx, arg, expectType, nilOk )

type( arg ), expectType ile eşleşmezse bir hata oluşturur. Ayrıca, arg nil ve nilOk doğruysa hata oluşmaz.

name çağıran işlevin adıdır ve argIdx, bağımsız değişkenin bağımsız değişken listesindeki konumudur. Bunlar hata mesajının biçimlendirilmesinde kullanılır.

libraryUtil.checkTypeMulti

libraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes )

$1, type( arg ) dizisindeki dizelerden hiçbiriyle eşleşmezse bir hata oluşturur.

Bu, birden fazla geçerli türe sahip bağımsız değişkenler içindir.

libraryUtil.checkTypeForIndex

libraryUtil.checkTypeForIndex( index, value, expectType )

type( value ), expectType ile eşleşmezse bir hata oluşturur.

Bu, bir __newindex metamethod uygulamasında kullanılmak üzere tasarlanmıştır.

libraryUtil.checkTypeForNamedArg

libraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk )

type( arg ), expectType ile eşleşmezse bir hata oluşturur. Ayrıca, arg nil ve nilOk doğruysa hata oluşmaz.

Bu, Lua'nın "named argument" sözdizimi, func{ name = value } olarak adlandırılan yöntemlerde libraryUtil.checkType() ile eşdeğer olarak kullanılması amaçlanmıştır.

libraryUtil.makeCheckSelfFunction

libraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc )

Bu, obj:method() sözdizimi ile çağrılması amaçlanan nesne tablolarına "methods" uygulanmasında kullanılmak üzere tasarlanmıştır. self bağımsız değişkeni ve yöntem adıyla bu yöntemlerin üstünde çağrılması gereken bir işlev döndürür; bu, self nesnesi selfObj değilse bir hata oluşturur.

Bu işlev genellikle bir kütüphanenin yapıcı işlevinde şu şekilde kullanılır:

 function myLibrary.new()
     local obj = {}
     local checkSelf = libraryUtil.makeCheckSelfFunction( 'myLibrary', 'obj', obj, 'myLibrary object' )
 
     function obj:method()
         checkSelf( self, 'method' )
     end
 
     function obj:method2()
         checkSelf( self, 'method2' )
     end
 
     return obj
 end

luabit

luabit kütüphane modülleri "bit" ve "hex" kullanılarak yüklenebilir

bit = require( 'luabit.bit' )
hex = require( 'luabit.hex' )

bit32 library, "luabit.bit" ile aynı işlemleri içerdiğini ve "luabit.hex" içindeki işlemlerin string.format() ve tonumber() kullanılarak gerçekleştirilebileceğini unutmayın.

Luabit modülü "noki", Scribunto'da tamamen yararsız olduğu için mevcut değildir. Luabit modülü "utf8" de Ustring kütüphanesi için yedek olarak kabul edildiğinden kullanılamaz.

ustring

Ustring kütüphanesi içine saf Lua arka ucu kullanılarak yüklenebilir

ustring = require( 'ustring' )

Her durumda Ustring kütüphanesi (mw.ustring) kullanılmalıdır, çünkü daha yavaş ve daha fazla bellek yoğun işlemlerin çoğunu geri aramalarla PHP koduna dönüştürür.

Uzantı kütüphaneleri

Bazı MediaWiki uzantıları ek Scribunto kitaplıkları sağlar. Bunlar ayrıca mw tablosunda, genellikle mw.ext tablosunda bulunur, ancak yalnızca belirli uzantılar yüklendiğinde bulunur (Scribunto uzantısının kendisine ek olarak).

Bu uzantılar Scribunto tarafından sağlanan kancaları kullanır:

Scribunto kütüphaneleri yazma, bu tür kütüphanelerin MediaWiki uzantıları için Lua arayüzleri sağlamak üzere nasıl geliştirilebileceği hakkında bilgi sağlar.

Aşağıdaki kütüphaneler planlanmıştır veya Gerrit incelenmektedir.

  • (şu anda yok)

mw.wikibase

Wikibase Client yerelleştirilebilir yapılandırılmış verilere erişim sağlar. Extension:Wikibase Client/Lua sayfasına bakın. Bu, Vikiveri tarafından desteklenmektedir.

mw.wikibase.lexeme

WikibaseLexeme, Wikibase Lexeme varlıklarına erişim sağlar. Bu, Wikidata: Sözlükbilimsel veriler tarafından desteklenmektedir.

mw.wikibase.mediainfo

WikibaseMediaInfo, Wikibase MediaInfo varlıklarına erişim sağlar. Extension:WikibaseMediaInfo/Lua sayfasına bakın. Bu, Commons'ta Yapısal Veri tarafından desteklenmektedir. Commons:Yapısal veri/Lua sayfasına bakın.

mw.bcmath

BCmath Lua modüllerine keyfi hassasiyette aritmetik sağlar. Extension:BCmath#Usage sayfasındaki "LDoc" bağlantısı aracılığıyla BCmath belgelerine bakın.

mw.smw

Semantic Scribunto, Semantic MediaWiki uzantısı için Scribunto uzantısı için yerel destek sağlar.

mw.ext.data

JsonConfig, yerelleştirilebilir tablo ve harita verilerine erişim sağlar. Extension:JsonConfig/Tabular sayfasına bakın. Tabular Data ve GeoJSON Map Data, Commons "Data:" ad alanında desteklenmektedir.

mw.ext.cargo

Cargo provides a means to query its data store from Lua. See Extension:Cargo/Other features#Lua support.

mw.ext.cattools

CategoryToolbox, belirli bir sayfanın bir kategoriye ait olup olmadığını Lua'dan kontrol etmek için bir araç sağlar

mw.ext.FlaggedRevs

FlaggedRevs, bir sayfanın kararlılık ayarlarına Lua'dan erişmenin bir yolunu sunar.

mw.ext.TitleBlacklist

TitleBlacklist, Lua'dan kara listeye alınan sayfa adlandırma girişleri hakkında bilgi sınamak ve bilgi edinmek için bir yol sağlar.

mw.ext.ParserFunctions

ParserFunctions, Lua'dan ayrıştırıcı işlevi ifadelerini değerlendirmek için bir araç sağlar.

mw.ext.articlePlaceholder

ArticlePlaceholder, varsayılan Wikibase işlemlerini Lua'dan geçersiz kılmak için bir yol sağlar. Extension:ArticlePlaceholder/Module:AboutTopic sayfasına bakın.

mw.ext.externalData

ExternalData, Lua'dan İnternet'ten yapılandırılmış veri almak için bir yol sağlar. Extension:External Data#Scribunto/Lua bölümüne bakın.

Standart Lua'dan farklılıklar

Değişen işlevler

Aşağıdaki işlevler değiştirildi:

setfenv()
getfenv()
Yapılandırmaya bağlı olarak kullanılamayabilir. Varsa, üst ortamlara erişim denemeleri başarısız olur.
getmetatable()
Yalnızca üst ortamlara yetkisiz erişimi önlemek için tablolarda çalışır.
tostring()
Tabloların ve işlevlerin işaretçi adresleri sağlanmamıştır. Bu, bellek bozulması güvenlik açıklarından yararlanılmasını zorlaştırmak içindir.
pairs()
ipairs()
__pairs ve __ipairs metametrelerine (Lua 5.2'de eklenmiştir) destek eklendi.
pcall()
xpcall()
Bazı dahili hatalar önlenemez.
require()
Scribunto ile dağıtılan bazı yerleşik modülleri ve vikinin Modül ad alanında bulunan modülleri alabilir. Viki modüllerini getirmek için ad alanı da dahil olmak üzere tam sayfa adını kullanın. Aksi takdirde yerel dosya sistemine erişilemiyor.

Kaldırılan işlevler ve paketler

Aşağıdaki paketler çoğunlukla kaldırıldı. Yalnızca listelenen işlevler kullanılabilir:

package.*
Dosya sistemi ve C kitaplığı erişimi kaldırıldı. Kullanılabilir işlevler ve tablolar:
package.loaded
package.preload
package.loaders
Yerel dosya sistemine erişen veya C kitaplıklarını yükleyen yükleyiciler mevcut değildir. Modül ad alanı sayfaları için bir yükleyici eklenir.
package.seeall()
os.*
Burada os.execute() gibi izin verilemeyen bazı güvensiz işlevler var. Mevcut işlevler:
os.clock()
os.date()
os.difftime()
os.time()
debug.*
İşlevlerin çoğu güvensizdir. Mevcut işlevler:
debug.traceback()

Aşağıdaki işlevler ve paketler mevcut değildir:

collectgarbage()
module()
coroutine.*
Bizim için hiçbir uygulama bilinmiyor, bu yüzden güvenlik açısından incelenmedi.
dofile()
loadfile()
io.*, file.*
Güvenli olmayan yerel dosya sistemi erişimine izin verir.
load()
loadstring()
Lua kaynak kodunun statik analizine izin vermek için bunlar atlanmıştır. Ayrıca, bunlara izin vermek, Lua kodunun makale ve şablon sayfalarına doğrudan eklenmesine izin verir, bu da kullanılabilirlik nedenleriyle istenmez.
print()
Bu wikitech-l üzerinde tartışılan idi ve kod kalitesini artırmak için dönüş değerleri lehine çıkarılması gerektiğine karar verildi. Gerekirse, hata ayıklama konsoluna bilgi çıkışı için mw.log() kullanılabilir.
string.dump()
Üst verilerden gizli verileri açığa çıkarabilir.

Ek uyarılar

Kaynak veri yapıları
Aynı düğüme birden fazla yolla ulaşılabilen dairesel veri yapıları ve veri yapıları PHP'ye doğru bir şekilde gönderilemez. Bunu yapmaya çalışmak tanımsız davranışa neden olur. Bu, bu tür veri yapılarının {{#invoke:}} tarafından çağrılan modülden döndürülmesini ve bunun gibi parametrelerin Scribunto kütüphanesi işlevlerine aktarılmasını içerir (ancak bunlarla sınırlı değildir). PHP'ye geri çağrı olarak uygulanır.

Bu tür veri yapıları, mw.loadData() ile yüklenen modüllerin dönüş değerleri de dahil olmak üzere Lua içinde serbestçe kullanılabilir.

Scribunto kütüphaneleri yazma

Bu bilgiler, Scribunto'nun içine dahil etmek veya kendi uzantıları için bir arabirim sağlamak için ek Scribunto kitaplıkları yazan geliştiriciler için yararlıdır.

Bir Scribunto kütüphanesi genellikle beş bölümden oluşur:

  • Kütüphanenin PHP bölümü.
  • Kütüphanenin Lua kısmı.
  • Test senaryolarının PHP kısmı.
  • Test vakalarının Lua kısmı.
  • Belgelendirme.

Mevcut kütüphaneler buna iyi bir örnektir.

Kütüphane

Kütüphanenin PHP kısmı, Scribunto_LuaLibraryBase genişletmesi gereken bir sınıftır. Uygulama ayrıntıları için o sınıfın belgelerine bakın. Scribunto uzantısında, bu dosya engines/LuaCommon/NameLibrary.php içine yerleştirilmeli ve Scribunto_LuaEngine::$libraryClasses bir eşleme eklenmelidir. Diğer uzantılar ScribuntoExternalLibraries kancasını kullanmalıdır. Her iki durumda da, anahtar Lua modülü adıyla eşleşmelidir (Scribunto'daki kütüphaneler için "mw.name" veya uzantı kütüphaneleri için "mw.ext.name").

Kütüphanenin Lua kısmı, Lua modüllerinden çağrılabilen işlevleri içeren bir tablo oluşturur. Scribunto uzantısında, dosya engine/LuaCommon/lualib/mw.Name.lua içine yerleştirilmelidir. Bu dosya genellikle böyle bir şeyi içermelidir:

local object = {}
local php

function object.setupInterface( options )
    -- Kurulum işlevini kaldır
    object.setupInterface = nil

    -- PHP geri çağrılarını yerel bir değişkene kopyalayın ve küreseli kaldırın
    php = mw_interface
    mw_interface = nil

    -- Burada başka bir kurulum yapın

    -- mw küresele yükleyin
    mw = mw or {}
    mw.ext = mw.ext or {}
    mw.ext.NAME = object

    -- Yüklendiğimizi belirtin
    package.loaded['mw.ext.NAME'] = object
end

return object

engine/LuaCommon/lualib/libraryUtil.lua içindeki modül (bunu local util = require 'libraryUtil' ile yükleyin) yardımcı olabilecek bazı işlevler içerir.

Scribunto test senaryolarını, kütüphaneniz test senaryoları sağlamasa bile, kütüphaneniz yüklü olarak çalıştırdığınızdan emin olun. Standart test senaryoları, beklenmedik global değişkenler ekleyen kütüphaneler gibi şeyleri içeren testleri içerir. Ayrıca, kitaplık PHP ile yüklüyse, Lua işlevlerinin sahip olduğu yükseltmeler #invoke arasında sıfırlanmaz. Modüllerin #invoke arasında bilgi aktarmak için bunu kötüye kullanmamasına dikkat edilmelidir.

Test senaryoları

Scribunto uzantısı, testleri hem LuaSandbox hem de LuaStandalone motorlarına karşı çalıştıracak Scribunto_LuaEngineTestBase test durumları için bir temel sınıf içerir. Kitaplığın test durumu bu sınıfı genişletmeli ve static function suite() geçersiz kılmamalıdır. Scribunto uzantısında, test durumu tests/engines/LuaCommon/NameLibraryTest.php olmalı ve diziye ScribuntoHooks::unitTestsList() (common/Hooks.php içinde) eklenmelidir; uzantıları test durumunu kendi UnitTestsList kanca işlevine eklemelidir, muhtemelen $wgAutoloadClasses['Scribunto_LuaEngineTestBase'] ayarlanıp ayarlanmadığına bağlıdır.

Çoğu zaman, test senaryosunu yapmak için gereken tek şey şudur:

class ClassNameTest extends Scribunto_LuaEngineTestBase {
    protected static $moduleName = 'ClassNameTest';

    function getTestModules() {
         return parent::getTestModules() + array(
             'ClassNameTest' => __DIR__ . '/ClassNameTests.lua';
         );
    }
}

Bu, ClassNameTests.lua dosyasını "Modüi:ClassNameTests" sayfasındaymış gibi yükler ve aşağıdaki özelliklere sahip bir nesneyi döndürmesini bekler:

  • count: Tam sayı, test sayısı
  • provide( n ): Üç değer döndüren işlev: n, test kodu n ve test n için beklenen çıkış olan bir dize.
  • run( n ): n testini çalıştıran ve bir dize döndüren işlev.

getTestModules() gösterildiği gibi bildirilirse, birçok yararlı yardımcı yöntem sağlayan "Modül:TestFramework" kullanılabilir. Bu kullanılırsa, ClassNameTests.lua şuna benzer:

local testframework = require 'Module:TestFramework'

return testframework.getTestProvider( {
    -- Testler buraya gider
} )

Her testin kendisi, aşağıdaki özelliklere sahip bir tablodur:

  • name: Testin adı.
  • func: Yürütülecek işlev.
  • args: İşleve iletilecek isteğe bağlı bağımsız değişken tablosu.
  • expect: Beklenecek sonuçlar.
  • type: Testin isteğe bağlı "type", varsayılan "Normal".

Tür, expect biçimini ve func öğesinin nasıl çağrıldığını denetler. Dahil edilen türler:

  • Normal: expect, bir dönüş değerleri tablosu veya testin bir hata oluşturması gerekiyorsa bir dizedir. func basitçe çağrılır.
  • Iterator: expect, dönüş değerleri tablosunun bir tablosudur. func, döngü için yinelenir ile çağrılır ve her yinelemenin dönüş değerleri toplanır.
  • ToString: "Normal" gibi, ancak her dönüş değeri tostring() öğesinden geçirilir.

Başka bir uzantıdaki test senaryoları

PHPUnit testlerini çalıştırmanın (en az) iki yolu vardır:

  1. Çekirdeklere karşı phpunit komutunu çalıştırın ve tests/phpunit/suites/ExtensionsTestSuite.php dosyasının UnitTestsList kancasını kullanarak uzantının testlerini bulmasına izin verin. Uzantınızın test sınıfı adlarının tümü benzersiz bir bileşen içeriyorsa (örn. uzantının adı), --filter seçeneği yalnızca uzantınızın testlerini çalıştırmak için kullanılabilir.
  2. Phpunit'i, "Test.php" ile biten herhangi bir dosyayı alacağı uzantı dizinine karşı çalıştırın.

Scribunto LocalSettings.php dosyasına yüklenmişse, bunlardan her ikisi de iyi çalışır. $wgAutoloadClasses['Scribunto_LuaEngineTestBase'] ayarlanmadığında UnitTestsList kancası Scribunto testini döndürmekten kaçınmak için Scribunto yüklü değilse yöntem 1'in çalışması kolaydır.

Ancak Jenkins yöntem #2'yi kullanır. Jenkins'in testleri düzgün bir şekilde yürütmesi için, uzantınıza bağımlılık olarak Scribunto eklemeniz gerekir. Bunun nasıl yapıldığına dair bir örnek için Gerrit change 56570 sayfasına bakın.

Herhangi bir nedenle testlerin Scribunto yüklenmeden #2 yöntemini kullanarak çalışabilmesi gerekiyorsa, bir çözüm, bu denetimi birim test dosyanızın üstüne eklemektir:

 if ( !isset( $GLOBALS['wgAutoloadClasses']['Scribunto_LuaEngineTestBase'] ) ) {
     return;
 }

Belgelendirme

Scribunto'da bulunan modüller, yukarıdaki Scribunto kütüphaneleri bölümündeki belgeleri içermelidir. Uzantı kitaplıkları, kendi uzantı sayfalarının bir alt sayfasına belge içermeli ve yukarıdaki Uzantı kitaplıkları alt bölümündeki dokümanlara bağlantı vermelidir.

Ayrıca bakınız

Lisans

Bu kılavuz, MIT lisansı altında bulunan Lua 5.1 kaynak kılavuzundan türetilmiştir.

Bu türev kitapçığı aynı lisansın koşulları altında da kopyalanabilir.