Bu kılavuz, MediaWiki'de $scribunto uzantısıyla kullanıldığı için $lua belgelemektedir.Bazı parçalarMIT lisansı altında bulunanLua 5.1 kaynak kılavuzundan türetilmiştir.
| Bu sayfa Scribunto uzantısının en son sürümünü belgelemektedir. Bazı özellikler henüz dağıtılmamış olabilir.Some features may not be deployed yet. |
Scribunto'nun etkin olduğu bir MediaWiki vikide,Module: ile başlayan bir başlık içerenbir sayfa oluşturun, örneğin "Module:Bananas".Bu yeni sayfaya aşağıdaki metni kopyalayın:
localp={}--p paket anlamına gelirfunctionp.hello(frame)return"Hello, world!"endreturnp
Bunu kaydedin, ardından başka bir (modül olmayan) sayfaya, örneğin birdeneme tahtası sayfasında şunu yazın:
{{#invoke:Bananas|hello}}
Bunun dışında "Bananas" ile modülünüze ne diyorsan onu değiştirmelisiniz. Bu, o modülden dışa aktarılan "hello" işlevini çağıracaktır.{{#invoke:Bananas|hello}}, işlevin döndürdüğü metinle değiştirilecektir; 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ü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.
{{#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 $anchor2args o çerçeve nesnesinin tablosunu kullanır.{{#invoke:}} içeren şablona geçirilen parametrelere #frame-object kullanarak ve bu karenin $3 erişerek de erişmek mümkündür.To access the parameters passed to the{{#invoke:}}, code will typically use theargs table of that frame object.It's also possible to access the parameters passed to the template containing the{{#invoke:}} by usingframe:getParent() and accessing that frame'sargs.Bu çerçeve nesnesi,çağıran ayrıştırıcı işlevlerini,genişletme şablonları vegenişletme rastgele vikimetin dizeleri gibi bağlama özgü özelliklere erişmek için de kullanılır.
Modül işlevi genellikle tek bir dize döndürmelidir; döndürülen değerlertostring() 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, vb.) zaten oldu. Bu nedenle modül, çıkış metninde bu özellikleri kullanamaz. Örneğin, bir modül $1 döndürürse, sayfada "$2" görünür.Therefore the module cannot use these features in its output text.For example, if a module returns"Hello, [[world]]! {{welcome}}", the page will read "Hello,world! {{welcome}}".
Ö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.
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, "Module:Bananas" belgesini "Module:Bananas/doc" olurdu.
Bu, aşağıdakisistem mesajları 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, belgelendirme sayfasını yansıtmaktadır.scribunto-doc-page-header — Belge sayfası görüntülenirken başlık görüntülenir. Belgelenen modülün adı (Module: öneki ile)$1 olarak geçirilir. Varsayılan, eğik olarak kısa bir açıklama görüntüler.Modüllerin doğrudan kategorize edilemeyeceğini unutmayın.Bunlar<includeonly>...</includeonly> etiketleri içindeki belgelendirme sayfasına yerleştirilebilir ve burada belgelendirme sayfası modül sayfasına yansıtmasında modüle uygulanacaktır.
To rename or move a module, use theMove Page link in the Tools sidebar. You will want to move both the module itself, as well as the subpage containing its documentation.
| MediaWiki sürümü: | ≥ 1.42 Gerrit change 574086 |
Since release 1.42, Scribunto recognizes one particular syntax for redirects (so they’re highlighted on special pages, appear on Special:WhatLinksHere, and so on), and also produces redirects when renaming/moving a module, similarly to how renaming of wikitext pages works (before that, module renames left no redirects behind, now extra rights are needed to suppress the redirect).
To manually create a module redirect, use the following syntax (which is valid Lua code, and worked like a redirect even before 1.42, but without MediaWiki recognizing it as such):
returnrequire[[Module:Foo]]
ReplaceFoo with the name of the module you'd like to redirect to.
Please note that other similarly valid Lua syntax variations (e.g. using quotation marks instead of square brackets, using parentheses around therequire parameter, or even whitespace variations) are still not recognized by MediaWiki as redirects.
Lua'daki birad (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:
andbreakdoelseelseifendfalseforfunctionifinlocalnilnotorrepeatreturnthentrueuntilwhileAlt ç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:
#%()*+,---....../:;<<====>>=[]^{}~=Yorum, bir dizenin dışında herhangi bir yerde-- ile başlar.-- hemenbir 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! ]===] ]==]
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", bir değerin yokluğunu temsil etmek için var olannil veri türüdür.
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.
Note: Lua does make a distinction betweennil and nothing at all in some limited situations.For example,tostring(nil) returns"nil", buttostring() throws an error, as the first parameter is required.This distinction is particularly relevant to theselect() function.
Boole değerleritrue vefalse.
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ızcafalse ve nil yanlış kabul edilir; 0 sayısı ve boş dizenin ikisi de doğru olarak kabul edilir.
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; buradaddd, 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ıcauzun 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 dizefoo=[[bar\tbaz]]-- bu teklif sınırlamalı dizeye eşdeğerdirfoo='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.
Lua, yalnızca dahili olarak64 bit çift hassasiyetli kayan nokta değeri olarak temsil edilen yalnızca bir sayısal türe sahiptir. Bu biçimde,-9007199254740991 (-253 + 1) ile9007199254740991 (253 - 1) arasındaki tam sayılar tam olarak gösterilebilir; daha büyük sayılar ve kesirli kısım içeren sayılar yuvarlama hatasına maruz kalabilir.
Sayı sabitleri, ondalık ayırıcı olarak nokta (.) kullanılarak ve gruplama ayırıcıları kullanılmadan belirtilir, örneğin123456.78.Numbers may also be represented usingE notation without spaces, e.g.1.23e-10,123.45e20, or1.23E+5.Integers may also be specified in hexadecimal notation using a0x prefix, e.g.0x3A.
Bir avuç sayı değeri özel bir şekilde işlenir:
These can be accessed in two ways: through themath library, asmath.huge and-math.huge, or through numerical operations such as1/0 and-1/0.
0 and-0 (see theIEEE 754 for more information on signed zeros).0 and-0 are strictly equivalent for almost all purposes, but behave differently in a small number of numerical operations (e.g.1/0 returns infinity, while1/-0 returns negative infinity).The distinction also affects conversions from number to string (and vice-versa).
No constant is provided for either of these, but0/0 evaluates to negative NaN.Note that both NaNs have the unique quality that any comparison which involves them evaluates tofalse (which means they do not even evaluate as being equal to themselves).The only practical distinction between the two is on type conversion to and from string (see below).
Tüm sayıların (0,-0, sonsuzluklar ve bilinmeyenler dahil) booleye dönüştürüldüğünde doğru kabul edildiğini unutmayın.This is unlike most other languages, where0 is usually considered false.When converted to a string, finite numbers are represented in decimal, and E notation if 1014 or greater (e.g."1e+14"); the infinities are"inf" and"-inf"; and the NaNs are"nan" and"-nan".
Known bug: the Lua interpreter will treat all instances of0and-0 as whichever of the two is encountered first when the script is compiled, which means that the return values oftostring(0),1/-0 (and so on) are affected by where they occur in the code.This can cause unexpected results, particularly if all instances of0 are converted to"-0" on return.If necessary, this can be circumvented by generating zero values usingtonumber("0") andtonumber("-0"), which doesn't seem to cause or be affected by the issue. See[1].
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:
[expression1] =expression2, anahtar olarakexpression1 deyimin (ilk) değerini ve değer olarakexpression2 değerin (ilk) değerini kullanır.name =expression,["name"] =expression olarak eşdeğerdirexpression, kabaca[i] =expression ile eşdeğerdir; buradai, 1'den başlayıp bu formdaki her alan belirtimiyle artan bir tam sayıdır. Bu son alan belirteciyse ve ifade birden fazla değer içeriyorsa, tüm değerler kullanılır; aksi takdirde yalnızca ilk değer tutulur.Bir tablodaki alanlara köşeli ayraç notasyonu kullanılarak erişilebilir, ör.table[key]. Ayrıca geçerli olanadlar 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, ... ) veyatable.func( table, ... ) eşdeğerdir.
Birdizi (aynı zamandaarray veyaliste olarak da adlandırılır), 1'den N'ye kadar tüm pozitif tam sayılar için sıfır olmayan değerlere ve N'den büyük tüm pozitif tam sayılar için değer içermeyen (nil) bir tablodur. Birçok Lua işlevi yalnızca diziler üzerinde çalışır ve pozitif olmayan tam sayı anahtarlarını yok sayar.
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şturt={}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ştururt2={["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__tostringmeta yöntemi kullanılarak geçersiz kılınabilir. Boş tablo bile bir boolean olarak kabul edilir.
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.
İşlevlerfunction 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şlevlerikapanış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.
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.
There is a strict limit of max 60 unique upvalues accessed inside a function. An upvalue is a value declared outside of a function and used inside it. As upvalues do count:
A violation of the limit can be triggered by a use of such a variable or function, not by its mere presence or availability. Repeated access to same upvalue does not exhaust the limit further.
Her tablonunmetatable 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'agetmetatable() işlevi kullanılarak erişilebilir vesetmetatable() işlevi ile ayarlanabilir.
Meta işlevleri için erişilirken, metatable alanlarınarawget() ile erişilir.
Tablonun kendisini etkileyen metatable alanları şunlardır:
t[key] nil döndüreceği zaman kullanılır. Bu alanın değeri bir tablo ise, erişim o tabloda tekrarlanacaktır, yani__index[key] (bu, o tablonun metatablosunun __index değerini ç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.t[key] = value tablosuna bir anahtar atarken kullanılır, buradarawget( t, key ) sıfır döndürür. Bu alanın değeri bir tablo ise, atama bu tabloya yapılacaktır, yani__newindex[key] = value (bu, o tablonun metatablosunun __newindex değerini ç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.t( ··· ). Değer,__call( t, ··· ) gibi bir işlev olarak adlandırılan bir işlev olmalıdır.Diğer metatable alanları şunları içerir:
Not: Lua'da tüm dizeler,__index,string tablosuna kaynakladığı tek bir metatable'ı da paylaşır. Bu metatable'a Scribunto'da veya kaynaklananstring tablosuna erişilemez; modüllerin kullanabileceği dize tablosu bir kopyadır.
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ı.
Ad 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.localanahtar 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ınagetfenv() işlevi kullanılarak erişilebilir vesetfenv() 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çinYerel değişken bildirimlerine bakın.
İ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.
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 uygunmeta 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 |
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çinfunction() end == function() end false değerini döndürür. Tablolar varsayılan olarak aynı şekilde karşılaştırılır, ancak bu __eqmetamethod 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ıra <= b uses__le if available, or if__lt is available then it is considered equivalent tonot ( b < a )a > b is considered equivalent tob < aa >= b is considered equivalent tob <= aGerekli meta yöntemler kullanılamıyorsa, bir hata oluşur.
Mantıksal işleçlerand,or venot ş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 veor kısa devre olduğunu unutmayın. Örneğin,foo() or bar(), yalnızcabar() isefoo() ile çağırır. ilk değeri olarak false veya nil değerini döndürü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 __concatmeta yöntemi 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 tekrara = 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 birarray içine eklemek ve sonundatable.concat() kullanmak daha hızlı olabilir.
Uzunluk operatörü# değeridir ve#a olarak kullanılır.a bir dizeyse, uzunluğu bayt cinsinden döndürür.a birsıra tablosuysa, dizinin uzunluğunu döndürür.
a bir diziolmayan bir tabloysa,#a 0 veya herhangi bir N değeri döndürebilir, öyle kia[N] sıfır değildir vea[N+1], daha yüksek dizinlerde sıfır olmayan değerler olsa bile sıfırdır. Ö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)
Lua'nın operatör önceliği veyaişlem sırası, en yüksekten en düşüğe:
^not#- (olumsuzluk)*/%+- (çıkarma)..<><=>=~===andorÖncelik düzeyinde, çoğu ikili işleç sol ilişkiseldir, yania / b / c,(a / b) / c olarak yorumlanır. Üstelleştirme ve birleştirme doğru çağrıştırıcıdır, yania ^ b ^ c,a ^ (b ^ c) olarak yorumlanır.
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, yanifunc()(). Ç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 ileterekadlandı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 bildirimi sözdizimi şöyle görünür:
functionnameoptional(var-listoptional)blockend
var-list içindeki tüm değişkenler işleve yereldir ve değerlerfunction 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 sonrablock 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şlevlerisö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ürfunctionmakeAdder(n)returnfunction(x)-- Dış kapsamdaki n değişkeni burada x ile eklenebilirreturnx+nendendlocaladd5=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:
Blok içinde, varargs ifadesi... kullanılabilir, sonuç işlev çağrısındaki tüm ekstra değerler olur. Örneğin,
localjoin=function(separator,...)-- fazladan bağımsız değişkenleri yeni bir tablo olarak alınlocalargs={...}-- ekstra bağımsız değişkenler sayısını doğru bir şekilde alınlocaln=select('#',...)returntable.concat(args,separator,1,n)endjoin(', ','foo','bar','baz')-- "foo, bar, baz" dizesini döndürür
select() işlevi varargs ifadesi ile çalışmak üzere tasarlanmıştır; özellikle,#{ ... } yerineselect( '#', ... ) kullanılmalıdır. varargs ifadesindeki değer sayısını saymak için, çünkü{ ... } birdizi 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:
localfactorial=function(n)ifn<=2thenreturnnelsereturnn*factorial(n-1)endend
İş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 veyaişlev bildirimi deyimi sözdizimi kullanılarak önlenebilir.
Birifade temel yürütme birimidir: bir atama, kontrol yapısı, işlev çağrısı, değişken bildirimi, vb.
Biryığı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.
Birblok da tıpkı bir yığın gibi bir ifade dizisidir. Bir blok, tek bir ifade oluşturmak için sınırlandırılabilir:doblock end. Bunlar, yerel değişkenlerin kapsamını sınırlamak veya başka bir bloğun ortasınareturn veyabreak eklemek için kullanılabilir.
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üzdena, b = b, a,a veb değerlerini değiştirecek.
localvariable-list
localvariable-list =expression-list
Yerel değişkenler,block veyachunk 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ıdakiAtanmalar 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.
whileexp doblock end
While ifadesi, bir ifade gerçek bir değer olarak değerlendirildiği sürece bir bloğu tekrarlar.
repeatblock untilexp
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.
forname =exp1,exp2,exp3 doblock endforname =exp1,exp2 doblock end
For döngüsünün ilk biçimi yerel bir değişken bildirir ve her yinelemedeexp1 ileexp2 ekleyerekexp3 değerleri için bloğu tekrar eder.exp3 ifadesinin tamamen atlanabileceğini unutmayın; bu durumda 1 kullanılır, ancaknil vefalse 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
dolocalvar,limit,step=tonumber(exp1),tonumber(exp2),tonumber(exp3)ifnot(varandlimitandstep)thenerror()endwhile(step>0andvar<=limit)or(step<=0andvar>=limit)dolocalname=varblockvar=var+stependend
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.
forvar-list inexpression-list doblock end
For döngüsünün ikinci biçimiiterator 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
dolocalfunc,static,var=expression-listwhiletruedolocalvar-list=func(static,var)var=var1-- ''var1'', ''var-list'' içindeki ilk değişkendirifvar==nilthenbreakendblockendend
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.
Genellikleexpression-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.
ifexp1 thenblock1 elseifexp2 thenblock2 elseblock3 end
exp1 true değerini döndürürseblock1 öğesini, aksi takdirdeexp2 true değerini döndürürseblock2 öğesini, aksi takdirdeblock3 öğesini yürütür.elseblock3 kısmı atlanabilir veelseifexp2 thenblock2 kısmı gerektiğinde tekrarlanabilir veya atlanabilir.
returnexpression-list
Return ifadesi, bir işlevden veyachunk (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.
Luakuyruk ö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() vedebug.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 birdo 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 birdo break end bloğu kullanılabilir.
Unlike some other languages, Lua does not have a "continue" statement for loops (i.e. a statement to move onto the next iteration without breaking the loop altogether).It is straightforward to achieve the same effect by nesting arepeat ... until true block immediately inside the main loop, which will only ever iterate once for each iteration of the main loop (as its condition is always true).Usingbreak will only end the inner loop, which has the practical effect of causing the main loop to continue onto the next iteration.If it is necessary to usebreak on the main loop, simply declare a variable which is checked each time the inner loop completes, and set it when necessary.
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ğinmw.log() günlük değerleri) ve herhangi bir dönüş değeri atılır.
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 beyanfunction func(var-list )block endfunc = function (var-list )block end
-- Yerel işlevlocal function func(var-list )block endlocal func; func = function (var-list )block end
-- Tablodaki alan olarak işlevfunction table.func(var-list )block endtable.func = function (var-list )block end
-- Tabloda yöntem olarak işlevfunction table:func(var-list )block endtable.func = function ( self,var-list )block end
Burada iki nokta üst üste işareti, bağımsız değişkenler listesinin başınaself adlı örtük bir bağımsız değişken ekleyerekişlev çağrıları için iki nokta üst üste işareti ile paralellik gösterir.
error() veassert() işlevleri kullanılarak hatalar "atılabilir". Hataları "yakalamak" içinpcall() veyaxpcall () kullanın. Bazı dahili Scribunto hatalarının Lua kodunda yakalanamayacağını unutmayın.
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ızcazayı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 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.
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=1mw.log(foo)-- "1" kaydediyor_G.foo=2mw.log(foo)-- "2" kaydediyor_G={}-- _G artık genel değişken tablosunu göstermiyor_G.foo=3mw.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 kaydetfork,vinpairs(_G)domw.log(k,v)end-- Yeni küresel değişkenlerin oluşturulmasını günlüğe kaydetsetmetatable(_G,{__newindex=function(t,k,v)mw.log("Creation of new global variable '"..k.."'")rawset(t,k,v)end})
Lua'nın çalışan sürümünü içeren bir dize, ör. "Lua 5.1".
assert( v, message, ... )
v sıfır veya yanlışsa bir hata verir. Bu durumda, hatanın metni olarakmessage 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, assertv vemessage 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 etmezlocalresult1,result2,etc=func(...)-- Bu aynı şekilde çalışır, ancak hataları kontrol ederlocalresult1,result2,etc=assert(func(...))
error( message, level )
message metniyle hata verir.
error normalde hatanın yeri hakkında bazı bilgiler ekler.level 1 veya atlanmışsa, bu bilgierror ç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( f )
Motor yapılandırmasındakiallowEnvFuncs değerine bağlı olarak bu işlevin kullanılamayabileceğini unutmayın.
f ile belirtildiği gibi birortam (genel değişken tablosu) döndürür:
getfenv çağıran işlevin ortamını döndürür. Genellikle bu_G ile aynı olacaktır.Tüm standart kütüphane işlevleri ve Scribunto kütüphane işlevleri tarafından kullanılan ortamlar korunur. Bu ortamlaragetfenv kullanarak erişmeye çalışmak bunun yerine sıfır döndürür.
getmetatable( table )
table öğesininmetatable 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( 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:
fori,vinipairs(t)do-- process each index-value pairend
Bu, çiftler (1, t[1]), (2, t[2]), ve böylece t[i] sıfır olduğunda durur.
__ipairs,meta yöntemi 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( 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 birnumerical for veyaipairs 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( 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:
fork,vinpairs(t)do-- her bir anahtar/değer çiftini işleend
Bu,next gibi anahtar/değer çiftlerinit olarak yineleyecektir; tarama sırasında tabloyu değiştirmeyle ilgili kısıtlamalar içinnext belgelerine bakın.
__pairsmetamethod 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( f, ... )
protected mode verilen bağımsız değişkenlerlef 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:
functionpcall(f,...)tryreturntrue,f(...)catch(message)returnfalse,messageendend
rawequal( a, b )
Bu, __eqmetamethod yok sayması dışındaa == b ile eşdeğerdir.
rawget( table, k )
Bu, __indexmetamethod yok sayması dışındatable[k] ile eşdeğerdir.
rawset( table, k, v )
Bu, __newindexmetamethod yok sayması dışındatable[k] = v ile eşdeğerdir.
select( index, ... )
index bir sayı ise,... içindeki o indeksten itibaren tüm bağımız değişkenleri döndürür.Ifindex is the string"#", returns the number of arguments in....
Note: unlike tables, lists of arguments (including thevararg expression...) treatnil as a distinct value (see documentation for# andunpack for the problem withnil in tables). For example:
select(2,"foo","bar") →"bar"select(2,"foo",nil,"bar",nil) →nil,"bar",nilselect("#","foo","bar") →2select("#","foo","bar",nil) →3Başka bir deyişle,select aşağıdakine benzer (son sıfır olmayan bağımısz değişkenden sonrakinil bağımsız değişkenlere de işlemesi dışında):
functionselect(index,...)localt={...}localmaxindex=table.maxn(t)ifindex=="#"thenreturnmaxindexelsereturnunpack(t,index,maxindex)endend
setmetatable( table, metatable )
table öğesininmetatable değerini ayarlar.metatable sıfır olabilir, ancak açıkça belirtilmelidir.
Geçerli metatable'ın __metatable alanı varsa,setmetatable bir hata atar.
Returnstable.
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( 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ıdakiVeri türleri bölümüne bakın.
Tablolar için standart davranış, __tostringmeta yöntemi 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( value )
value türünü dize olarak döndürür:"nil","number","string","boolean","table" veya"function".
unpack( table, i, j )
Manüel olarak yazılırsatable[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 vej varsayılan olarak#table olur.
If the table does not have a value for a particular key, unpack will return nil for that value. For example,unpack({"foo",[3]="bar"},1,4) returns"foo",nil,"bar",nil.
table birdizi değilse vej sıfır veya belirtilmemişse sonuçların belirleyici olmadığını unutmayın; ayrıntılar içinUzunluk operatörüne bakın.
xpcall( f, errhandler )
Hata mesajı iade edilmeden önceerrhandler işlevine iletilmesi dışındapcall gibidir.However, unlikepcall, no arguments may be given tof.
Sözde kodda,xpcall şu şekilde tanımlanabilir:
functionxpcall(f,errhandler)tryreturntrue,f()catch(message)message=errhandler(message)returnfalse,messageendend
debug.traceback( mesaj, seviye )
Ç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.
math.abs( x )
x mutlak değerini döndürür.
math.acos( x )
x arc kosinüsünü (radyan cinsinden verilir) döndürür.
math.asin( x )
x arc sinüsünü döndürür (radyan cinsinden verilir).
math.atan( x )
x arc tanjantını verir (radyan cinsinden verilir).
math.atan2( y, x )
Sonucun çeyreğini bulmak için her iki parametrenin işaretlerini kullanaraky/x (radyan cinsinden verilen)arc tanjantını döndürür.
math.ceil( x )
x fazladan büyük veya ona eşit olan en küçük tamsayıyı döndürür.
math.cos( x )
x kosinüsü verir (radyan cinsinden verilir).
math.cosh( x )
x hiperbolik kosinüsü verir.
math.deg( x )
Derece olarakx (radyan cinsinden verilen) açısını döndürür.
math.exp( x )
değerini döndürür.
math.floor( x )
x ile küçük veya ona eşit olan en büyük tamsayıyı döndürür.
math.fmod( x, y )
Bölgeyi sıfıra doğru yuvarlayanx bölünmesinin geri kalanınıy olarak döndürür. Örneğin,math.fmod( 10, 3 ),1 verir.
math.frexp( x )
m vee olmak üzere iki değer döndürür:
x sonlu ve sıfırdan farklıysa:,e bir tamsayıdır vem mutlak değeri aralığındadırx is zero:m ande are 0x is NaN or infinite:m isx ande is not specifiedPozitif sonsuzluğu temsil eden değer; herhangi bir sayısal değere eşit veya daha büyük.
math.ldexp( m, e )
döndürür (e tam sayı olmalıdır).
math.log( x )
x doğal logaritmayı döndürür.
math.log10( x )
x taban-10 logaritmasını verir.
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ğerx NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.
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ğerx NaN ise NaN döndürülecektir, ancak diğer NaN'ler göz ardı edilecektir.
math.modf( x )
İki sayıyı döndürür,x ayrılmaz parçası vex kesirli kısmı. Örneğin,math.modf( 1.25 ),1, 0.25 verir.
değeri.
math.pow( x, y )
x^y ile eşdeğerdir.
math.rad( x )
Radyan cinsindenx (derece olarak verilir) açısını döndürür.
math.random( m, n )
Yalancı rastgele bir sayı döndürür.
m ven bağımsız değişkenleri atlanabilir, ancak belirtilirse tamsayılara dönüştürülebilir olmalıdır.
Note that incorrect output may be produced ifm orn are less than −2147483648 or greater than 2147483647, or ifn - m is greater than 2147483646.
math.randomseed( x )
Sözde rastgele üreteç içinxseed olarak ayarlar.
Aynı çekirdeği kullanmanınmath.random değerinin aynı sayı dizisini vermesine neden olacağını unutmayın.
math.randomseed(tonumber(mw.getLanguage("en"):formatDate("U"))*10000+os.clock()*10000)
math.sin( x )
x değerinde sinyali döndürür (radyan cinsinden verilir).
math.sinh( x )
x hiperbolik sinüsü döndürür.
math.sqrt( x )
x ile karekökü döndürür.x^0.5 ile eşdeğerdir.
math.tan( x )
x tanjantını döndürür (radyan cinsinden verilir).
math.tanh( x )
x hiperbolik tanjantını döndürür.
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( format, time )
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:
Biçim "*t" değilse, tarih tarihi C işlevistrftime ile aynı kurallara göre biçimlendirilmiş bir dize olarak döndürür.
os.difftime( t2, t1 )
t1 üzerindent2 ile saniye sayısını döndürür.
os.time( table )
MevcutUnix zamanını 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.
require( modulename )
Belirtilen modülü yükler.
İlk olarak, modülün zaten yüklü olup olmadığını görmek içinpackage.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çinpackage.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ğerpackage.loaded[modulename] içine kaydedilir ve döndürülür.
Mevcut yükleyiciler hakkında bilgi içinpackage.loaders belgelerine bakın.
Örneğin, aşağıdakileri içeren bir "Module:Giving" modülünüz varsa:
localp={}p.someDataValue='Merhaba!'returnp
Bunu, aşağıdaki gibi bir kodla başka bir modüle yükleyebilirsiniz:
localgiving=require("Module:Giving")localvalue=giving.someDataValue-- değer şimdi 'Merhaba!'
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.
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 verequire 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:
package.preload[modulename] bakınStandart Lua yükleyicilerin dahilolmadığını unutmayın.
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( table )
table için __indexmeta yöntemi değerini_G olarak ayarlar.
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çinScribunto Ustring kütüphanesinde ilgili yöntemleri kullanın.
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ğeri şeklindedir.mw.ustring.byte() ile aynı.
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.
localvalue=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çinmw.ustring.char() sayfasına bakın.
string.find( s, pattern, init, plain )
s dizesindekipattern ile ilk eşleşmeyi arar. Bir eşleşme bulursa,find, bu oluşumun başladığı ve bittiğis 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ümaninit 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 yerineinit ofsetinin karakterlerde olduğumw.ustring.find() ögesine bakın. .
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 dizisiprintf biçim belirleyicilerinin sınırlı bir alt kümesini kullanır:
'-','+',' ','#' ve'0' şeklindedir.'*' desteklenmiyor.'*' desteklenmiyor.'c','d','i','o','u','x','X','e','E','f','g','G','s','%' ve standart olmayan'q'.q dönüşüm belirtecis 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ındakiData 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( s, pattern )
Her çağrıldığında,pattern dizesindens 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.
DeseninUstring patterns bölümünde açıklandığı gibi genişletildiği benzer bir işlev içinmw.ustring.gmatch() içinde bakın.
string.gsub( s, pattern, repl, n )
İki değer 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 formununrepl içindeki herhangi bir sıra,1 ile 9 arasından 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.
Ifrepl is a string or number, then its value is used for replacement. The character % works as an escape character: any sequence inrepl of the form%d,withd between 1 and 9, stands for the value of thed-th captured substring. The sequence%0 stands for the whole match, and the sequence%% stands for a single %.
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).
DeseninUstring patterns bölümünde açıklandığı gibi genişletildiği benzer bir işlev içinmw.ustring.gsub() içinde bakın.
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çinmw.ustring.len() bakın.
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çinmw.ustring.lower() bakın.
string.match( s, pattern, init )
Dizedekipattern 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ümaninit aramanın nerede başlatılacağını belirtir; varsayılan değeri 1'dir ve negatif olabilir.
DeseninUstring patterns veinit göreli konumunda açıklandığı gibi uzatıldığı benzer bir işlev için bayt yerine karakterlermw.ustring.match() öğesine bakın.
string.rep( s, n )
s dizesininn kopyasının birleşimi olan bir dize döndürür.mw.ustring.rep() ile aynı.
string.reverse( s )
s tersine çevrilmiş (bytewise) bir dize döndürür.
string.sub( s, i, j )
i ile başlayan vej kadar devam edens alt dizesini döndürür;i vej negatif olabilir.j sıfır veya atlanmışsa, dizenin sonuna kadar devam eder.
Özelliklestring.sub(s,1,j) çağrısı,j uzunluğundas önekini vestring.sub(s, -i) isei uzunluğundas sonekini döndürür.
Ofsetlerin bayt yerine karakter olduğu benzer bir işlev içinmw.ustring.sub() bakın.
string.ulower( s )
An alias formw.ustring.lower().
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çinmw.ustring.upper() bakın.
string.uupper( s )
An alias formw.ustring.upper().
Lua'nın kalıplarınındüzenli ifadeler ile benzer olduğunu, ancak aynı olmadığını unutmayın. Özellikle, normal ifadeler vePCRE arasındaki aşağıdaki farklılıklara dikkat edin:
\) değil yüzde (%) şeklindedir..) her zaman yeni satırlar dahil tüm karakterlerle eşleşir.| operatörü).*,+,? ve-) yalnızca tek tek karakterlere veya karakter sınıflarına uygulanabilir, grupları yakalamak için değil.- olur ve bu, PCRE'nin*? niceleyicisine eşdeğerdir.{n,m} niceleyici).^,$ ve%f[set] "sınır" modelidir; PCRE'nin\b veya(?=···) gibi iddialar mevcut değil.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çinUstring patterns bakın.
Bir karakter kümesini temsil etmek içinkarakter sınıfı kullanılır. Bir karakter sınıfının tanımlanmasında aşağıdaki kombinasyonlara izin verilir:
x | (buradax $2 sihirli karakterlerinden biri değil)x karakterinin kendisini temsil eder. |
|---|---|
. | (nokta) Tüm karakterleri temsil eder. |
%a | Tüm ASCII harflerini temsil eder. |
%c | Tüm ASCII kontrol karakterlerini temsil eder. |
%d | Tüm rakamları temsil eder. |
%l | Tüm ASCII küçük harflerini temsil eder. |
%p | Tüm noktalama karakterlerini 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. |
%y | (burada $x alfasayısal olmayan herhangi bir karakterdir) $x karakterini temsil eder. Sihirli karakterlerden kaçmanın standart yolu budur. Herhangi bir noktalama karakteri (sihirli olmayanlar bile), kendisini bir desende temsil etmek için kullanıldığında bir '%' ile gelebilir. |
[set] | set içindeki tüm karakterlerin birleşimi olan sınıfı temsil eder. Bir karakter aralığı, aralığın bitiş karakterlerini ' Aralıklar ve sınıflar arasındaki etkileşim tanımlanmamıştır. Bu nedenle, |
[^set] | set tümleyenini temsil eder, buradaset yukarıdaki gibi yorumlanır. |
Birdesen öğesi şunlar olabilir
*' tarafından takip edilen tek bir karakter sınıfı. Bu tekrar öğeleri her zaman mümkün olan en uzun diziyle eşleşecektir;+' tarafından takip edilen tek bir karakter sınıfı. Bu tekrar öğeleri her zaman mümkün olan en uzun diziyle eşleşecektir;-' tarafından takip edilen tek bir karakter sınıfı, ayrıca sınıftaki 0 veya daha fazla karakter tekrarıyla da eşleşir. '*'dan farklı olarak, bu tekrar öğeleri her zaman olasıen kısa sıra ile eşleşir;?' tarafından izlenen tek karakterli bir sınıf, sınıftaki bir karakterin 0 veya 1 tekrarı ile eşleşir;%n, 1 ile 9 arasındakin için; böyle bir öğe, yakalanann-inci dizgeye eşit bir alt dizgiyle eşleşir (aşağıya bakın);%bxy, buradax vey iki farklı karakterdir; bu tür öğe,x ile başlayan,y ile biten vex veydengeli olduğu dizelerle eşleşir. Bu demektir ki, eğer birix için +1 vey için -1 sayarak dizgiyi soldan sağa okursa,y bitişinin ilky olduğu anlamına gelir. Örneğin,%b() öğesi, dengeli parantezli ifadelerle eşleşir.%f[set], birsınır düzeni; böyle bir öğe, bir sonraki karakterinset ait olduğu ve önceki karakterinset ait olmadığı herhangi bir konumdaki boş bir dizeyle eşleşir.set daha önce açıklandığı gibi yorumlanır. Konunun başı ve sonu, sanki '\0' karakteriymiş gibi işlenir.Birdesen bir dizi desen öğesidir.
Bir desenin başındaki '^', eşleşmeyikonu dizesinin başlangıcı. Bir desenin sonundaki '$', eşleşmeyikonu dizesinin sonu. Diğer pozisyonlarda, '^' ve '$' özel bir anlama sahip değildir ve kendilerini temsil eder.A$ at the end of a pattern anchors the match at the end of the subject string. At other positions,^ and$ have no special meaning and represent themselves.
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, dizenina*(.)%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 harflipalindrome 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.
Known limitations: UnlikeUstring library patterns, String library patterns may not contain more than 32 captures. If the pattern has more, then the String function will throw an error. Because the Ustring library has its own maximum of 10,000 bytes for patterns (unlike the String library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries.
Tablo kitaplığındaki çoğu işlev, tablonun birdizi temsil ettiğini varsayar.
table.foreach(),table.foreachi() vetable.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, 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 vej için varsayılan değer tablonun uzunluğudur.i,j fazladan büyükse, boş dizeyi döndürür.
table.insert( table, value )table.insert( table, pos, value )
Gerekirse,table,pos konumunavalue öğesini ekler, diğer öğeleri yukarı kaydırır.pos için varsayılan değer tablonun artı 1 uzunluğudur, böylecetable.insert(t, x) çağrısıt tablonun sonunax ekler.
#table kadar olan elemanlar kaydırılır; tablodizi değilse uyarılar içinUzunluk operatörü konusuna bakın.
Note: when using thepos parameter,value should not benil. Attempting to insert an explicitnil value into the middle of a table will result in undefined behaviour, which may delete elements in the table unpredictably.
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
functiontable.maxn(table)localmaxn,k=0,nilrepeatk=next(table,k)iftype(k)=='number'andk>maxnthenmaxn=kenduntilnotkreturnmaxnend
table.remove( table, pos )
table konumundanpos 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öylecetable.remove( t ) çağrısı, öğenin son öğesini kaldırır.
#table kadar olan elemanlar kaydırılır; tablodizi değilse uyarılar içinUzunluk operatörü konusuna bakın.
table.sort( table, comp )
Tablo öğelerini,table[1] üzerindentable[#table] verilenyerinde 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öylecenot comp(a[i+1],a[i]) sıralamadan sonra doğru olur).comp verilmemişse, bunun yerine standart Lua operatörü< kullanılır.Ifcomp is given, then it must be a function that receives two table elements, and returnstrue when the first is less than the second (so thatnot comp(a[i+1],a[i]) will be true after the sort).Ifcomp is not given, then the standard Lua operator< is used instead.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.
Tüm Scribunto kütüphanelerimw tablosunda bulunur.
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( ... )
Tüm bağımsız değişkenlerdetostring() öğesini çağırır, ardından bunları ayırıcılar olarak sekmelerle birleştirir.
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()
Geçerliframe nesnesi, genellikle en yeni#invoke öğesinden kare nesnesi döndürür.
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()
Geçerli#invokesubsted 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ıdakiMetin döndürme konusuna bakın.
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çinmw.loadData() sağlanır.
mw.loadData, aşağıdaki farklarla birlikterequire() gibi çalışır:
{{#invoke:}} çağrısı için bir defa yerine sayfa başına yalnızca bir kez değerlendirilir.package.loaded içinde kaydedilmez.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() veipairs() çalışır ancak#value,next() veTablo 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.loadJsonData( page )
This is the same asmw.loadData() above, except it loads data from JSON pages rather than Lua tables.The JSON content must be an array or object.See alsomw.text.jsonDecode().mw.loadJsonData does not check if the user has 'read' permissions to access the page. It throws an error if the page does not exist or if it is empty.
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( ... )
Bağımsız değişkenlerimw.allToString() öğesine iletir, sonra elde edilen dizeyi günlük arabelleğine ekler.
When a Scribunto module is invoked on a page, the log buffer is included as "Lua logs" in the Parser profiling data, which is visible at the bottom of the page when previewing.It is also accessible via JavaScript aslimitreport-logs, which is included in theScribunto object inwgPageParseReport frommw.config (i.e.mw.config.get("wgPageParseReport").scribunto["limitreport-logs"]).
Hata ayıklama konsolunda,print() işlevi bu işlev için bir diğer addır.
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,{{#invoke:}} iletilen parametrelere ve ayrıştırıcıya arabirimdir.
Çerçeve kitaplığı olmadığını veframe 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ıcamw.getCurrentFrame() üzerinden elde edilebilir.
Ç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" veframe.args['name'] (veyaframe.args.name)"arg3" döndürür.pairs(frame.args) veyaipairs(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 ve2 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 ) veTablo 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(name,args)frame:callParserFunction(name,...)frame:callParserFunction{name=string,args=table}Uygun bir dize döndürerek birayrıştırıcı işlevi çağırın. Bu,frame:preprocess tercih edilir, ancak 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('ns',{0})frame:callParserFunction('ns',0)frame:callParserFunction{name='ns',args={0}}-- {{#tag:nowiki|some text}}frame:callParserFunction('#tag',{'nowiki','some text'})frame:callParserFunction('#tag','nowiki','some text')frame:callParserFunction('#tag:nowiki','some text')frame:callParserFunction{name='#tag',args={'nowiki','some text'}}-- {{#tag:ref|some text|name=foo|group=bar}}frame:callParserFunction('#tag',{'ref','some text',name='foo',group='bar'})
Make sure you provide the unnamed parameter after the colon even if it's empty and ignored by the parser function.
frame:callParserFunction('#someparserfunction',{'',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{title=title,args=table}
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ğerdirframe:expandTemplate{title='template',args={'|'}}-- Bu yaklaşık {{template|{{((}}!{{))}}}} gibi vikimetin ile eşdeğerdirframe:expandTemplate{title='template',args={'{{!}}'}}
frame:extensionTag(name,content,args)frame:extensionTag{name=string,content=string,args=table_or_string}Bu,'#tag' işlev adı vecontent ileargs eklenmişframe:callParserFunction() çağrısına eşdeğerdir.
-- Bunlar eşittirframe:extensionTag('ref','some text',{name='foo',group='bar'})frame:extensionTag{name='ref',content='some text',args={name='foo',group='bar'}}frame:callParserFunction('#tag',{'ref','some text',name='foo',group='bar'})-- Bunlar eşittirframe:extensionTag{name='ref',content='some text',args={'some other text'}}frame:callParserFunction('#tag',{'ref','some text','some other text'})
frame:getParent()
{{#invoke:}} tarafından oluşturulan çerçevede çağrılan,{{#invoke:}} adlı sayfanın çerçevesini döndürür. Bu çerçevede çağrılır, nil döndürür.
For instance, if the template{{Example}} contains the code{{#invoke:ModuleName|FunctionName|A|B}}, and a page transcludes that template with the code{{Example|C|D}}, then inModule:ModuleName, callingframe.args[1] andframe.args[2] returns"A" and"B", and callingframe:getParent().args[1] andframe:getParent().args[2] returns"C" and"D", withframe being the first argument in the function call.
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{title=title,args=table}
Geçerli çerçevenin alt öğesi olan isteğe bağlı bağımsız değişkenler ve başlık içeren yeni birFrame nesnesi oluşturun.
This is mainly intended for use in providing a specific parent frame environment for calls likeframe:newChild(...):callParserFunction('#invoke',...) orframe:newChild(...):preprocess(...), etc., for modules that check their parent frame, etc.Beyond casual debugging, e.g., testing functions in the debug console, etc., it should not be used to attempt to emulate{{#invoke:}} in production code as there are a number of ways the called module can detect how it is called.The number of frames that may be created at any one time is limited.
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 yerineframe:expandTemplate kullanın. Bağımsız değişkenler boru karakterleri veya diğer viki biçimlendirmeye içeriyorsa, daha hızlıdır ve hataya daha az eğilimlidir.
Tek bir ayrıştırıcı işlevini genişletiyorsanız, aynı nedenlerleframe:callParserFunction kullanın.
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(text)frame:newParserValue{text=text}frame:preprocess(text) sonucunu döndüren bir yöntem olanobject:expand() içeren bir nesne döndürür.
frame:newTemplateParserValue{title=title,args=table}
Belirtilen bağımsız değişkenlerle çağrılanframe:expandTemplate sonucunu döndüren bir yöntemle,object:expand() içeren bir nesne döndürür.
frame:argumentPairs()
pairs(frame.args) ile aynı. Geriye dönük uyumluluk için dahil edilmiştir.
mw.hash.hashValue( algo, value )
Belirtilen algoritmaya sahip bir dize değerini karma yapar. Geçerli algoritmalarmw.hash.listAlgorithms() kullanılarak getirilebilir.
mw.hash.listAlgorithms()
mw.hash.hashValue () içinde kullanım için desteklenen karma algoritmaların bir listesini döndürür.This method is a passthrough ofhash_algos().
mw.html, Lua'dan karmaşık HTML oluşturmak için akıcı bir arayüzdür. Bir mw.html nesnesimw.html.create kullanılarak oluşturulabilir.
mw.html.name olarak belgelenen işlevler genelmw.html tablosunda mevcuttur;mw.html:name vehtml: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:
localdiv=mw.html.create('div')div:attr('id','testdiv'):css('width','100%'):wikitext('Some text'):tag('hr')returntostring(div)-- Output: <div id="testdiv" style="width:100%;">Some text<hr /></div>
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 niltagName 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ınargs.parent: Geçerli mw.html örneğinin üst öğesi (dahili kullanım için tasarlanmıştır)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.
html:wikitext( ... )
mw.html nesnesine belirsiz sayıda vikimetin dizesi ekler.
Bunun ilknil öğesinde durduğunu unutmayın.
Basic wikitext will get parsed, like HTML, links, bold, lists or tables. However, templates and parser functions won't be evaluated if they are passed directly to this function, unless they came from template parameters.Those will be rendered in plain text instead.To evaluate them, they'll have to be passed throughframe:preprocess.
html:newline()
nw.html nesnesine bir yeni satır ekler.Useful when used before and aftermw.html:wikitext(), when the wikitext contains lists or tables, whose syntax only has a special meaning when present at the start of a line.
html:tag( tagName, args )
Oluşturucuya verilentagName 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
Note that contrarily to other methods such ashtml:node(), this method doesn't return the current mw.html instance, but the mw.html instance of the newly inserted tag.Make sure to usehtml:done() to go up to the parent mw.html instance, orhtml:allDone() if you have nested tags on several levels.
html:attr( name, value )html:attr( table )
Düğümde verilenname vevalue 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.
html:getAttr( name )
Belirtilenname ilehtml:attr() kullanarak önceden ayarlanmış bir html özelliğinin değerini alın.
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.
html:css( name, value )html:css( table )
Düğümde verilenname vevalue 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.
html:cssText( css )
Düğümün stil özelliğine hamcss ekleyin. Bir nil parametresi iletilirse, bu bir no-op'dur.
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.
html:allDone()
html:done() gibi, ancak ağacın kök düğümüne kadar gidip onu döndürür.
Dil kodlarıdil kodu da açıklanmaktadır. MediaWiki'nin dil kodlarının çoğuIETF 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 genelmw.language tablosunda mevcuttur;mw.language:name velang:name olarak belgelenen işlevler bir dil nesnesinin yöntemleridir (mw.language.new veyamw.language.getContentLanguage bölümlere bakın).
mw.language.fetchLanguageName( code, inLanguage )
Verilen dil kodu için dilin tam adı: yerel ad (dil özerkliği), varsayılan olarakinLanguage için bir değer verilirse hedef dile çevrilen ad.
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.getContentLanguage()
Vikinin varsayılan içerik dili için yeni bir dil nesnesi döndürür.

mw.language.getFallbacksFor( code )mw.language.getFallbacksFor( code, mode )
Belirtilen kod için MediaWiki'nin yedek dil kodlarının bir listesini döndürür.
| MediaWiki sürümü: | ≥ 1.46 Gerrit change 1200597 |
You can optionally pass one of two supported fallback modes as a second argument:
mw.language.FALLBACK_MESSAGES'en' (English) for all languages. This is the default behavior.mw.language.FALLBACK_STRICTmw.language.getFallbacksFor('hsb')-- { 'dsb', 'de', 'en' }mw.language.getFallbacksFor('hsb',mw.language.FALLBACK_MESSAGES)-- { 'dsb', 'de', 'en' }mw.language.getFallbacksFor('hsb',mw.language.FALLBACK_STRICT)-- { 'dsb', 'de' }mw.language.getFallbacksFor('en-gb',mw.language.FALLBACK_STRICT)-- { 'en' }
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" (yanimw.language.isValidBuiltInCode için true değerini döndürür) vemw.language.fetchLanguageName için boş olmayan bir dize döndürür.
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 (yanimw.language.isKnownLanguageTag için true değerini döndürmek). Ayrıcamw.language.isValidBuiltInCode yanlış döndürmesine rağmen bazı kodların "desteklendiğini" unutmayın.
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" (yanimw.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( 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( 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.
lang:getCode()
Bu dil nesnesinin dil kodunu döndürür.
lang:toBcp47Code()
Returns the standardBCP-47 language code for this language object (see alsoManual:Language/BCP-47). This is the code string which is appropriate to use in HTML, for example as the value of alang attribute.
lang:getFallbackLanguages()lang:getFallbackLanguages( mode )
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.
lang:isRTL()
Dil sağdan sola yazılırsa true, soldan sağa yazılırsa false değerini döndürür.
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şlevimw.language.getContentLanguage():lc( s ) çağrısı olarak uygulanır.
lang:lcfirst( s )
Dizenin ilk karakterinilang:lc() gibi küçük harfe dönüştürür.
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şlevimw.language.getContentLanguage():lc( s ) çağrısı olarak uygulanır.
lang:ucfirst( s )
Dizenin ilk karakterinilang:lc() gibi büyük harfe dönüştürür.
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.
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.
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 yerinevikinin 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')
lang:formatDuration( seconds )lang:formatDuration( seconds, chosenIntervals )
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.
chosenIntervals, 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.These includemillennia,centuries,decades,years,weeks,days,hours,minutes,seconds.
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 olaraktonumber() dile duyarlı bir sürümüdür.
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çinn .. ' ' .. lang:plural( n, 'sock', 'socks' ) veyan .. ' ' .. lang:plural( n, { 'sock', 'socks' } ) kullanabilirsiniz.
Dizi için gerekli değerler dile bağlıdır; bazı ayrıntılar içinsihirli kelimelerin yerelleştirilmesi vetranslatewiki'nin SSS konusuna bakın.
lang:convertGrammar( word, case )lang:grammar( case, word )
convertGrammar, MediaWiki'nin Dil nesnesinde aynı addaki yöntemin sırası ile eşleşirken,grammar,Help:Sihirli kelimeler#Yerelleştirme sayfasında belgelenen aynı adın ayrıştırıcı işlevinin sırasıyla eşleşir.Bu, verilen bükülme koducase için uygun bükülmüşword biçimini seçer.
word vecase için olası değerler dile bağlıdır, bazı ayrıntılar içinSpecial:MyLanguage/Help:Magic words#Localisation vetranslatewiki:Grammar sayfalarına bakın.
lang:gender( what, masculine, feminine, neutral )lang:gender( what, { masculine, feminine, neutral } )
"Erkek", "kadın" veya kayıtlı bir kullanıcı adı olabilecekwhat cinsiyetine karşılık gelen dizeyi seçer.
lang:getArrow( direction )
direction karşılık gelen bir Unicode ok karakteri döndürür:
lang:getDir()
Dilin yönlülüğüne bağlı olarak "ltr" veya "rtl" değerini döndürür.
lang:getDirMark( opposite )
Dilin yönlülüğüne veopposite öğ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.
lang:getDirMarkEntity( opposite )
Dilin yönlülüğüne veopposite öğesinin doğru veya yanlış değer olup olmamasına bağlı olarak "‎" veya "‏" değerini döndürür.
lang:getDurationIntervals( seconds )lang:getDurationIntervals( seconds, chosenIntervals )
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.
chosenIntervals, 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.These includemillennia,centuries,decades,years,weeks,days,hours,minutes,seconds.
Those unit keywords are also the keys used in the response table. Only units with a non-zero value are set in the response, unless the response would be empty in which case the smallest unit is returned with a value of 0.
Bu kütüphane, yerelleştirme mesajlarına ve MediaWiki: ad alanına bir arabirimdir.
mw.message.name olarak belgelenen işlevler genelmw.message tablosunda mevcuttur;mw.message:name vemsg:name olarak belgelenen işlevler bir mesaj nesnesinin yöntemleridir (mw.message.new bölümüne bakın).
mw.message.new( key, ... )
Belirtilenkey mesajı için yeni bir mesaj nesnesi oluşturur.Kalan parametreler yeni nesneninparams() yöntemine iletilir.
İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.
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( msg, ... )
Uluslararası bir iletiyi aramak yerine, verilen metni doğrudan kullanarak yeni bir ileti nesnesi oluşturur. Kalan parametreler yeni nesneninparams() yöntemine iletilir.
İleti nesnesinin hiçbir özelliği yoktur, ancak aşağıda belgelenen birkaç yöntemi vardır.
mw.message.rawParam( value )
msg:parse() tarafından vikimetin olarak ayrıştırılmayacak şekilde değeri sarar.
mw.message.numParam( value )
Değeri, otomatik olaraklang:formatNum() tarafından biçimlendirilecek şekilde sarar. Bunun gerçekte mevcut olanDil kütüphanesi kaynağına bağlı olmadığını unutmayın.
mw.message.getDefaultLanguage()
Varsayılan dil için bir Dil nesnesi döndürür.
msg:params( ... )msg:params( params )
Mesaja bağımsız bağımsız değişkenler olarak veyaarray tablosu olarak iletilebilen parametreler ekleyin. Parametreler sayı, dize veyamw.message.numParam() veyamw.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çinmsg nesnesini döndürür.
msg:rawParams( ... )msg:rawParams( params )
:params() gibi, ancak önce tüm parametrelerimw.message.rawParam() içinden geçirme etkisi vardır.
Çağrı zincirlemeye izin vermek içinmsg nesnesini döndürür.
msg:numParams( ... )msg:numParams( params )
:params() gibi, ancak önce tüm parametrelerimw.message.numParam() içinden geçirme etkisi vardır.
Çağrı zincirlemeye izin vermek içinmsg nesnesini döndürür.
msg:inLanguage( lang )
İletiyi işlerken kullanılacak dili belirtir.lang, bir dize veyagetCode() yöntemine sahip bir tablo olabilir (yaniDil nesnesi).
Varsayılan dil,mw.message.getDefaultLanguage() tarafından döndürülen dildir.
Çağrı zincirlemeye izin vermek içinmsg nesnesini döndürür.
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çinmsg nesnesini döndürür.
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.
msg:exists()
Mesaj anahtarının var olup olmadığını gösteren bir boole döndürür.
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.
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.
MediaWiki'nin geçerli sürümünü tutan bir dize.
$wgScriptPath değeri.
$wgServer değeri.
$wgSitename değeri.
$wgStylePath değeri.
Sayıya göre dizine eklenen tüm ad alanları için tablo tutma verileri.
Mevcut veriler:
Ad alanlarını ada göre (yerelleştirilmiş veya standart) aramaya izin veren bir metatable da ayarlanır. Örneğin, hemmw.site.namespaces[4] hem demw.site.namespaces.Project, Project ad alanı hakkında bilgi döndürür.
Yalnızca içerik ad alanlarını tutan ve sayıya göre dizine eklenmiş tablo. Ayrıntılar içinmw.site.namespaces bölümüne bakın.
Sayıya göre dizine eklenmiş olarak yalnızca konu ad alanlarını tutan tablo. Ayrıntılar içinmw.site.namespaces bölümüne bakın.
Numaraya göre dizinlenmiş yalnızca tartışma ad alanlarını tutan tablo. Ayrıntılar içinmw.site.namespaces bölümüne bakın.
Site istatistikleri tutan tablo. Mevcut istatistikler:
mw.site.stats.pagesInCategory(category, which )
Kategori ile ilgili istatistikleri alır. "*" özel değerine sahipwhich ise, sonuç aşağıdaki özelliklere sahip bir tablodur:
Yukarıdaki anahtarlardan (all", "subcats", "files", "pages")which ise, sonuç, karşılık gelen değere sahip bir sayıdır.
Sorgulanan her yeni kategori, pahalı işlev sayısını artıracaktır.
mw.site.stats.pagesInNamespace(namespace )
Belirtilen ad alanındaki sayfa sayısını döndürür (sayıya göre belirtin).
mw.site.stats.usersInGroup(group )
Belirli bir gruptaki kullanıcı sayısını döndürür.
mw.site.interwikiMap(filter )
Kullanılabilirvikiarası ö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:
$wgExtraInterlanguageLinkPrefixes.for links listed in $wgExtraInterlanguageLinkPrefixes, this is the tooltip text shown when users hover over the interlanguage link. Nil if not specified.
The SVG library provides a way to create SVG images rendered as<img> elements in HTML.
SVGs are rendered insecure animated mode.This means that scripts and external resources are not rendered but declarative animations such as SMIL or CSS@keyframe are allowed as long as they don't need user interaction.
CSS from the surrounding page do not affect the SVG elements inside the file so you cannot use CSS variables like--color-base in your svg.You can however useprefers-color-scheme @media queries or thelight-dark() CSS function to make the SVG night mode compatible
For documentation on how SVG works, please seeMDN.
Initializes a new SVG image object.
The returned object has a few methods:
Sets the inner content of the<svg> tag.
<svg> tag.<img> tag.Allowed attributes are: width, height, class, id, alt, title, style.<img> tag.The return value is a strip marker.Example:
localsvg=mw.svg.new()svg:setAttribute('width','120px'):setAttribute('height','120px'):setContent('<circle cx="50" cy="50" r="45" style="fill:green;" />'):setImgAttribute('alt','SVG image'):toImage()-- Gives the image
This can be especially useful to dynamically graph data. For example:
functionp.drawGraph()-- A series of (x,y) data points to graphlocalpoints={"0, 1","1, 4.5","3, 2","5, 4"}localpathElm=mw.html.create('polyline'):css('stroke','red'):attr('points',table.concat(points,' ')):attr('fill','none'):attr('stroke-width',"0.05px")-- Circle each point:css('marker','url(#circle)')localaxis=mw.html.create('path'):css('stroke','black')-- M means move to point, L means draw line from current point to specified point:attr('d','M 5 -0.1 L -0.1 -0.1 L -0.1 5'):css('stroke-width',"0.2px"):css('stroke-linecap','square'):css('fill','none')-- Circle marker for each data pointlocalmarker=mw.html.create('marker'):attr('id','circle'):attr('markerWidth','10'):attr('markerHeight','10'):attr('refX','5'):attr('refY','5'):tag('circle'):attr({cx=5,cy=5,r=4,stroke="red",fill="none"}):done()returnmw.svg.new():setImgAttribute('width','200'):setAttribute('viewBox',"-0.5 -0.5 6, 6")-- Make origin be bottom left:setAttribute('transform','scale(1,-1)'):setContent(tostring(axis)..tostring(marker)..tostring(pathElm)):toImage()end
Which produces:
Metin kitaplığı,Dize kütüphanesi veUstring 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(string )mw.text.decode(string, decodeNamedEntities )
DizedekiHTML 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 '<', '>', '&', '"' ve ' '. Aksi takdirde, tanınacak HTML5 adlı varlıkların listesi PHP'nin [$urlget_html_translation_table] işlevinden yüklenir.Otherwise, the list of HTML5 named entities to recognize is loaded from PHP'sget_html_translation_table function.
Known bugs: Approximately 600 of around 2.200 named entities in the HTML5 standard do not get decoded, even whendecodeNamedEntities is used; this includes approximately 40 of around 250 entities which are also included in HTML4.This occurs because PHP'sget_html_translation_table function returns only one mapping for each character, so for example is not decoded since PHP returns only→ as the mapping for→.→
mw.text.encode(string )mw.text.encode(string, charset )
Bir dizedeki karakterleriHTML 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.Five characters are replaced with the appropriate named entities:<,>,&," and the non-breaking space (U+00A0).All others are replaced with numeric entities.
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(string )mw.text.jsonDecode(string, flags )
Bir JSON dizesinin kodunu çözer.flags 0 veyamw.text.JSON_PRESERVE_KEYS vemw.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çinmw.text.JSON_PRESERVE_KEYS iletin.
JSON'da dizilerde veya nesnelerde terminal virgülünün olmaması gibi belirli gereksinimleri gevşetmek içinmw.text.JSON_TRY_FIXING iletin. Bu önerilmez.
Sınırlamalar:
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(value )mw.text.jsonEncode(value, flags )
Bir JSON dizesini kodlayın. Aktarılan değer JSON'da kodlanamazsa hatalar artar.flags 0 veyamw.text.JSON_PRESERVE_KEYS vemw.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:
{}) olarak değil, her zaman boş diziler ([]) olarak kodlanır.__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.mw.text.killMarkers(string )
Bir dizeden tüm MediaWikişerit işaretleyici öğelerini kaldırır.
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 dilindeMediaWiki:comma-separator üzerinden alınır ve varsayılan bağlaçMediaWiki:and ileMediaWiki:word-separator birleştirilir.
Mesajlar için varsayılan değerleri kullanan örnekler:
-- Boş dizeyi döndürürmw.text.listToText({})-- "1" döndürürmw.text.listToText({1})-- "1 ve 2" döndürürmw.text.listToText({1,2})-- "1, 2, 3, 4 ve 5" döndürürmw.text.listToText({1,2,3,4,5})-- "1; 2; 3; 4 veya 5" döndürürmw.text.listToText({1,2,3,4,5},'; ',' or ')
mw.text.nowiki(string )
Vikimetin olarak yorumlanmasını önlemek için dizedeki çeşitli karakterleriHTML varlıkları ile değiştirir. Bu içerir:
",&,',<,=,>,[,],{,|,}#,*,:,;, boşluk, sekme (\t)---- dizenin başlangıcında veya yeni satırdan hemen sonra ilk- karakteri__ bir alt çizgi kaçacak:// iki nokta kaçacakISBN,RFC veyaPMID değerden sonra gelen bir boşluk karakteri kaçar#,*,:,;, space, tab (\t)---- at the start of the string or immediately after a newline will have the first- escaped__ will have one underscore escaped:// will have the colon escapedISBN,RFC, orPMID will be escapedmw.text.split(string, pattern, plain )
DizeyiUstring desenipattern 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.
Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following:
functionsplit(text,pattern,plain)localret={}locals,l=1,string.len(text)whilesdolocale,n=string.find(text,pattern,s,plain)ifnotethenret[#ret+1]=string.sub(text,s)s=nilelseifn<ethen-- Empty separator!ret[#ret+1]=string.sub(text,s,e)ife<lthens=e+1elses=nilendelseret[#ret+1]=e>sandstring.sub(text,s,e-1)or''s=n+1endendreturnretend
mw.text.gsplit(string, pattern, plain )
mw.text.split() öğesine eşdeğer çağrı ile döndürülecek alt dizeler üzerinde yinelenecek biriterator işlevi döndürür.
Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following:
functiongsplit(text,pattern,plain)locals,l=1,string.len(text)returnfunction()ifsthenlocale,n=string.find(text,pattern,s,plain)localretifnotethenret=string.sub(text,s)s=nilelseifn<ethen-- Empty separator!ret=string.sub(text,s,e)ife<lthens=e+1elses=nilendelseret=e>sandstring.sub(text,s,e-1)or''s=n+1endreturnretendend,nil,nilend
mw.text.tag(name, attrs, content )mw.text.tag{name = string, attrs = table, content = string|false }
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; gerekirsemw.text.encode() kullanın.
<ref> gibi uzantı etiketlerini düzgün bir şekilde döndürmek için, bunun yerineframe:extensionTag() kullanın.
mw.text.trim(string )mw.text.trim(string, 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(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ırsaellipsis 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 dilindeMediaWiki:ellipsis üzerinden alınır.
Varsayılan "..." üç nokta kullanan örnekler:
-- "foobarbaz" döndürürmw.text.truncate("foobarbaz",9)-- "fooba..." döndürürmw.text.truncate("foobarbaz",5)-- "...arbaz" döndürürmw.text.truncate("foobarbaz",-5)-- "foo..." döndürürmw.text.truncate("foobarbaz",6,nil,true)-- "Foobarbaz" döndürür, çünkü bu "foobarba..." daha da kısadırmw.text.truncate("foobarbaz",8)
mw.text.unstripNoWiki(string )
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(string )
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.
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( a, b )
a başlığınınb 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()
Geçerli sayfanın başlık nesnesini döndürür.
mw.title.new(text, namespace )mw.title.new( ID )
Yeni bir başlık nesnesi oluşturur.
Birid 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 birtext 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.newBatch{firstPage, secondPage, thirdPage }
mw.title.newBatch( {firstPage, secondPage, thirdPage },defaultNamespace )
Create a batch of titles to look up. The first argument is a list of page titles to lookup. The list must only contain strings; using numbers as is allowed bymw.title.new is not currently supported. The optional second argument is the default namespace to use when looking up the page title.
This method will return a batch lookup object with two methods:lookupExistence andgetTitles. CallinglookupExistence() requests that the batch lookup fills out the .exists, .contentModel, .id, .isRedirect fields of the Title objects.getTitles() will return a table with title objects. Any invalid titles will be nil in the table. Media namespace titles will not have .exists filled out.
For example:
-- The following will increment oncelocaltitles=mw.title.newBatch{"First page","User:Bob","Second page"}:lookupExistence():getTitles()-- the following will not increment the countertitles[1].existstitles[2].id
mw.title.makeTitle(namespace, title, fragment, interwiki )
namespace ad alanındatitle başlıklı, isteğe bağlı olarak belirtilenfragment veinterwiki ö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.
Note also that functionality for interwiki titles is limited tointerwiki /isExternal /isLocal and URL-related methods; other methods might not behave as expected.
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.
0.nil if this title cannot have a talk page.(added in MediaWiki 1.42.0-wmf.15, refsT180911)title.text ile aynıdır.title.text ile aynıdır.title.text ile aynıdır.file.exists için takma ad. Dosya ad alanı başlıkları için bu, dosyanın kendisini değil, dosya açıklama sayfasının varlığını kontrol eder.Buzengin olabilir.mw.site.namespaces içinde bulunan bir anahtar olan herhangi bir şey tarafından belirtilebilir.mw.site.namespaces içinde bulunan bir anahtar olan herhangi bir şey tarafından belirtilebilir.mw.site.namespaces içinde bulunan bir anahtar olan herhangi bir şey tarafından belirtilebilir.mw.title.makeTitle( title.namespace, title.baseText ) olarak aynıdır.mw.title.makeTitle( title.namespace, title.rootText ) olarak aynıdır.mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text ) ile aynı veya bu başlığın tartışma sayfası olamıyorsanil.mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text ) olarak aynıdır.false döndürür."edit" ve"move"). Tablo değerleri, ilk ögesi koruma düzeyini içeren bir dize olan dizilerdir. Sayfa korumasızsa, tablo değerleri veya dizi öğelerinil olacaktır.Buzengindir."restrictions" ve"sources" boş olacaktır.Buzengindir.mw.title.makeTitle( title.namespace, title.text .. '/' ..text ) olarak aynıdır.title.text değerini döndürür."http","https","relative" (varsayılan) veya"canonical".nil değerini döndürür. Sayfa bir yansıtma olarak kaydedilecektir.A few properties are also added by extensions:
Başlık nesneleriiliş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 nesnesindekipahalı alanına erişmenin sayfaya bir "bağlantı" kaydettiğini unutmayın (örneğinSpecial:WhatLinksHere sayfasında gösterildiği gibi). Başlık nesnesiningetContent() yöntemini kullanarak veyaredirectTarget alanına erişerek, bunu "dönüştürülme" olarak kaydeder ve başlık nesnesininfile veyafileExists alanları bunu "dosya bağlantısı" olarak kaydeder.
Dosya veya Medya ad alanındaki bir sayfayı temsil eden başlık nesnelerininfile adlı bir özelliği olacaktır.Bu pahalı. Bu, aşağıdaki gibi yapılandırılmış bir tablodur:This isexpensive, and will be recorded as an file usage if the file exists.This is a table, structured as follows:
fileExists özelliği, geriye dönük uyumluluk nedeniyle vardır ve bu özelliğin diğer adıdır. Bufalse ise, diğer tüm dosya özelliklerinil olacaktır.ThefileExists property on a Title object exists for backwards compatibility reasons and is an alias for this property.If this isfalse, all other file properties will benil.
nil olur.# operatörü, dosyadaki sayfa sayısını almak için kullanılabilir. Her bir sayfa tablosu bir genişlik ve yükseklik özelliği içerir.Thisis expensive
id, isRedirect,exists vecontentModel ö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.
mw.uri.encode(string, enctype )
Dizeninyü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(string, enctype )
Dizeninyü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(string )
Bir dizeyi MediaWiki URI parçasında kullanmak için kodlar.
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( 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 vej sayısal bağımsız değişkenleri, dizenin tamamı yerine ayrıştırılacaks 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. Hemi hem dej,string.sub gibi negatif olabilir.
mw.uri.canonicalUrl(page, query )
İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanınstandart URL'si içinURI nesnesi döndürür.
mw.uri.fullUrl(page, query )
İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanıntam URL'si içinURI nesnesi döndürür.
mw.uri.localUrl(page, query )
İsteğe bağlı sorgu dizesi/tablosu ile bir sayfanınyerel URL'si içinURI nesnesi döndürür.
mw.uri.new(string )
Geçirilen dize veya tablo için yeni birURI nesnesi oluşturur. Tablodaki olası alanlar için URI nesnelerinin açıklamasına bakın.
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, bazıları veya tümü sıfır olabilecek aşağıdaki alanlara sahiptir:
Aşağıdaki özellikler de mevcuttur:
tostring() URI dizesini verecektir.
URI nesnesinin yöntemleri şunlardır:
uri:parse(string )
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.
uri:clone()
URI nesnesinin bir kopyasını oluşturur.
uri:extend(parameters )
Parametreler tablosunu, nesnenin sorgu tablosuyla birleştirir.
Ustring kütüphanesinin standartDize 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.
Bir desenin izin verilen maksimum uzunluğu bayt olarak.
Bir dizenin izin verilen maksimum uzunluğu bayt olarak.
mw.ustring.byte( s, i, j )
Tek tek baytları döndürür;string.byte() ile aynı.
mw.ustring.byteoffset( s, l, i )
Dizedeki bir karakterin bayt uzaklığını döndürür. Heml hem dei 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üçükl değerleri bunlara göre hesaplanır.
mw.ustring.char( ... )
Tam sayıların bayt değerleri yerine Unicode kod noktaları olması dışındastring.char() gibi.
localvalue=mw.ustring.char(0x41f,0x440,0x438,0x432,0x435,0x442,0x21)-- değer şimdi 'Привет!'
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( s, pattern, init, plain )
DeseninUstring patterns de açıklandığı gibi genişletilmesi veinit ofsetinin bayt yerine karakterlerde olması dışındastring.find() gibi.
mw.ustring.format(format, ... )
string.format() ile aynı. Dizelerin genişlikleri ve kesinlikleri kod noktaları değil bayt cinsinden ifade edilir.
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 vej -1 olur. Bu,iteratorfor da kullanılmak üzere tasarlanmıştır:
forcodepointinmw.ustring.gcodepoint(s)do-- blockend
mw.ustring.gmatch( s, pattern )
DeseninUstring patterns bölümünde açıklandığı gibi genişletilmesi dışındastring.gmatch() gibi.
Known bug - When used with a pattern which can match the empty string, the function will get stuck in an infinite loop. For example, the following loop never terminates:
forcaptureinmw.ustring.gmatch("foo bar",".*")do-- blockend
mw.ustring.gsub( s, pattern, repl, n )
DeseninUstring desenler de açıklandığı gibi genişletilmesi dışındastring.gsub() gibi.
Known bugs: Whenrepl is a table, it is possible to use numbers as keys instead of strings (e.g. to replace instances of in a string, the value at key"5" or[5] would be used); as such, the output is not predictable if they have different (non-nil) values.["5"]
This is not an issue forstring.gsub(), which ignores any numbers as keys.
mw.ustring.isutf8(string )
Dize geçerli UTF-8 ise true, değilse false döndürür.
mw.ustring.len(string )
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çinstring.len() öğesine bakın.
mw.ustring.lower(string )
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 nesnesindelc() çağrılır.
mw.ustring.match( s, pattern, init )
DeseninUstring i de açıklandığı gibi genişletilmesi veinit ofsetinin bayt yerine karakterlerde olması dışındastring.match() gibi.
mw.ustring.rep(string, n )
string.rep() ile aynı.
mw.ustring.sub( s, i, j )
Ofsetlerin bayt yerine karakter olması dışındastring.sub() gibi.
mw.ustring.toNFC(string )
DizeyiNormalleş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( s )
DizeyiNormalleş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.toNFKC( s )
Converts the string toNormalization Form KC (also known as Normalization Form Compatibility Composition). Returns nil if the string is not valid UTF-8.
mw.ustring.toNFKD( s )
Converts the string toNormalization Form KD (also known as Normalization Form Compatibility Decomposition). Returns nil if the string is not valid UTF-8.
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 nesnesindeuc() çağrılır.
Ustring işlevlerindeki desenlerDize kitaplığı kalıpları ile aynı sözdizimini kullanır. En büyük fark karakter sınıflarınınUnicode karakter özellikleri açısından yeniden tanımlanmasıdır:
%a: Genel Kategori "Harf" olan tüm karakterleri temsil eder.%c: Genel Kategori "Kontrol" ile tüm karakterleri temsil eder.%d: Genel Kategori "Sayı, ondalık basamak" olan tüm karakterleri temsil eder.%l: Genel Kategori "Küçük Harf" olan tüm karakterleri temsil eder.%p: Genel Kategori "Noktalama" ile tüm karakterleri temsil eder.%s: Genel Kategori "Ayırıcı", artı sekme, satır besleme, satır başı, dikey sekme ve form besleme ile tüm karakterleri temsil eder.%u: Genel Kategori "Büyük Harf" olan tüm karakterleri temsil eder.%w: Genel Kategori "Harf" veya "Ondalık Sayı" olan tüm karakterleri temsil eder.%x: onaltılık rakamların tam genişlikte karakter sürümlerini ekler.Dize kitaplığı kalıpları da olduğu gibi, burada $2 tamamlayıcı kümeyi temsil eder ("Genel Kategoriolmadan 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.
Known limitations: UnlikeString library patterns, Ustring library patterns have a maximum length of 10.000 bytes. If the pattern exceeds this length, then the Ustring function will throw an error. Because the String library has its own maximum of 32 captures (unlike the Ustring library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries.
$,+,<,=,>,^,`,|,~, can be matched by%p in the string library but not in the ustring library, as Unicode classifies them as Symbols rather than Punctuation.Bu kitaplıklar varsayılan olarak dahil edilmemiştir, ancak gerekirserequire() kullanılarak yüklenebilir.
Lua 5.2bit32 kütüphanesinin bu öykünmesi kullanılarak yüklenebilir
bit32=require('bit32')
Bit32 kitaplığı, işaretsiz 32 bit tamsayılardabitsel işlem sağlar. Giriş sayıları tamsayılara (belirtilmemiş bir şekilde) ve indirgenmiş modü 232 olarak kesilir, böylece değer 0 ila 232 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 (20 değerine sahip olan) ve 31 en anlamlı olanıdır (değeri 2 olan31).
bit32.band( ... )
Bağımsız değişkenlerininbitwise 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( x )
x öğesininbitwise tamamlayıcı döndürür.
bit32.bor( ... )
Bağımsız değişkenlerininbitwise 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.band( ... ) ~= 0 ile eşittir
bit32.bxor( ... )
Bağımsız değişkenlerininbitwise 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( n,field, width )
field bitinden başlayarakn öğesindenwidth 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( n, v,field, width )
n içindekiwidth bitlerinifield bit ile başlayarakv düşükwidth 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( n, disp )
nkaydırılmışdisp bitlerini sola döndürür. Bu birmantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2disp ile bölünmeye eşdeğerdir.
31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.
bit32.rshift( n, disp )
nkaydırılmışdisp bitlerini sağa döndürür. Bu birmantıksal kaydırma: eklenen bitler 0'dır. Bu genellikle 2disp ile bölünmeye eşdeğerdir.
31'in üzerinde yer değiştirmenin 0 ile sonuçlanacağını unutmayın.
bit32.arshift( n, disp )
n kaydırılandisp bit sayısını sağa döndürür. Bu biraritmetik 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( n, disp )
ndö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( n, disp )
ndö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.
Bu kütüphane, Scribunto kütüphanelerini uygularken faydalı yöntemler içerir. Kullanılarak yüklenebilir
libraryUtil=require('libraryUtil')
libraryUtil.checkType(name, argIdx, arg, expectType, nilOk )
type( arg ),expectType ile eşleşmezse bir hata oluşturur. Ayrıca,arg nil venilOk doğruysa hata oluşmaz.
name çağıran işlevin adıdır veargIdx, 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(name, argIdx, arg, expectTypes )
Bu, birden fazla geçerli türe sahip bağımsız değişkenler içindir.
libraryUtil.checkTypeForIndex(index, value, expectType )
type( value ),expectType ile eşleşmezse bir hata oluşturur.
Bu, bir__newindexmetamethod uygulamasında kullanılmak üzere tasarlanmıştır.
libraryUtil.checkTypeForNamedArg(name, argName, arg, expectType, nilOk )
type( arg ),expectType ile eşleşmezse bir hata oluşturur. Ayrıca,arg nil venilOk doğruysa hata oluşmaz.
Bu, Lua'nın "named argument" sözdizimi,func{ name = value } olarak adlandırılan yöntemlerdelibraryUtil.checkType() ile eşdeğer olarak kullanılması amaçlanmıştır.
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 nesnesiselfObj değilse bir hata oluşturur.
Bu işlev genellikle bir kütüphanenin yapıcı işlevinde şu şekilde kullanılır:
functionmyLibrary.new()localobj={}localcheckSelf=libraryUtil.makeCheckSelfFunction('myLibrary','obj',obj,'myLibrary object')functionobj:method()checkSelf(self,'method')endfunctionobj:method2()checkSelf(self,'method2')endreturnobjend
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şlemlerinstring.format() vetonumber() 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" deUstring kütüphanesi için yedek olarak kabul edildiğinden kullanılamaz.
Thestrict library is not a normal library; it causes an error to be raised whenever a new variable is used that is not explicitly scoped as a local variable (e.g., global variable assignment references). This functionality is typically enabled by loading at the top of a module using:
require('strict')
On many Wikimedia wikis this was formerly implemented inModule:No globals, which was replaced viaphab:T209310. It is in part derived fromstrict.lua.
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.
Bazı MediaWiki uzantıları ek Scribunto kitaplıkları sağlar. Bunlar ayrıcamw tablosunda, genelliklemw.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.
Wikibase Client, yerelleştirilebilir yapılandırılmış verilere erişim sağlar, özellikle deVikiveri.md_docs_topics_lua.html ve $1 sayfasına bakın.
[[WikibaseLexeme|WikibaseLexeme]], Wikibase Lexeme varlıklarına erişim sağlar. Bu,Wikidata: Sözlükbilimsel veriler tarafından desteklenmektedir.Seedocs_topics_lua.html andExtension:WikibaseLexeme/Lua.
[[WikibaseMediaInfo|WikibaseMediaInfo]], Wikibase MediaInfo varlıklarına erişim sağlar.WikibaseMediaInfo/Lua sayfasına bakın.Bu,Commons'ta Yapısal Veri tarafından desteklenmektedir.Commons:Yapısal veri/Lua sayfasına bakın.
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.
Semantic Scribunto,Semantic MediaWiki uzantısı için Scribunto uzantısı için yerel destek sağlar.
$1, yerelleştirilebilir tablo ve harita verilerine erişim sağlar.$1 sayfasına bakın.Tabular Data ve GeoJSONMap Data,Commons "Data:" ad alanında desteklenmektedir.
mw.ext.data.get(pagename )Cargo provides a means to query its data store from Lua.SeeExtension:Cargo/Other features#Lua support.
CategoryToolbox, belirli bir sayfanın bir kategoriye ait olup olmadığını Lua'dan kontrol etmek için bir araç sağlarDeneyseldir ve herkese açık Wikimedia vikilerinde etkinleştirilmemiştir.
FlaggedRevs, bir sayfanın kararlılık ayarlarına Lua'dan erişmenin bir yolunu sunar.
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.
[EXPERIMENTAL] Part of theTranslate extension. Provides a means to query translations present insidemessage bundles. Readmodule documentation for more information.
$1, Lua'dan ayrıştırıcı işlevi ifadelerini değerlendirmek için bir araç sağlar.
Proofread Page provides access to Index and Page namespaces.SeeExtension:Proofread Page/Lua reference.This is supported byWikisource:ProofreadPage.SeeHelp:Extension:ProofreadPage.
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.SeeExtension:ArticlePlaceholder/Module:AboutTopic.
ExternalData, Lua'dan İnternet'ten yapılandırılmış veri almak için bir yol sağlar.Extension:External Data/Lua sayfasına bakın.SeeExtension:External Data/Lua.
mw.ext.UnlinkedWikibase.getEntity(id )mw.ext.UnlinkedWikibase.query(sparql )WikiSEO, mevcut sayfa için SEO Verilerini ayarlamak için bir yol sağlar.Extension:WikiSEO#Lua modüllerinde kullanım sayfasına bakın.
WSSlots provides a number of Lua functions for working withMCR slots:
mw.slots.slotContent(slotName,pageName)mw.slots.slotTemplates(slotName,pageName) (deprecated)mw.slots.slotContentModel(slotName,pageName)mw.slots.slotData(slotName,pageName)TabberNeue provides a means to render a Tabber from Lua.SeeExtension:TabberNeue#Lua for usage.
Aşağıdaki işlevlerdeğiştirildi:
Aşağıdaki paketlerçoğunlukla kaldırıldı. Yalnızca listelenen işlevler kullanılabilir:
Aşağıdaki işlevler ve paketler mevcutdeğildir:
Attempting to do so will cause undefined behavior.This includes (but is not limited to) returning such data structures from the module called by{{#invoke:}} and passing such data structures as parameters to Scribunto library functions that are implemented as callbacks into PHP.
Such data structures may be used freely within Lua, including as the return values of modules loaded withmw.loadData().
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:
Mevcut kütüphaneler buna iyi bir örnektir.
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 dosyaengines/LuaCommon/NameLibrary.php içine yerleştirilmeli veScribunto_LuaEngine::$libraryClasses bir eşleme eklenmelidir. Diğer uzantılarScribuntoExternalLibraries 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, dosyaengine/LuaCommon/lualib/mw.Name.lua içine yerleştirilmelidir. Bu dosya genellikle böyle bir şeyi içermelidir:
localobject={}localphpfunctionobject.setupInterface(options)-- Kurulum işlevini kaldırobject.setupInterface=nil-- PHP geri çağrılarını yerel bir değişkene kopyalayın ve küreseli kaldırınphp=mw_interfacemw_interface=nil-- Burada başka bir kurulum yapın-- mw küresele yükleyinmw=mwor{}mw.ext=mw.extor{}mw.ext.NAME=object-- Yüklendiğimizi belirtinpackage.loaded['mw.ext.NAME']=objectendreturnobject
engine/LuaCommon/lualib/libraryUtil.lua içindeki modül (bunulocal 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.
Scribunto uzantısı, testleri hem LuaSandbox hem de LuaStandalone motorlarına karşı çalıştıracakScribunto_LuaEngineTestBase test durumları için bir temel sınıf içerir.Kitaplığın test durumu bu sınıfı genişletmeli vestatic function suite() geçersiz kılmamalıdır.Scribunto uzantısında, test durumutests/engines/LuaCommon/NameLibraryTest.php olmalı ve diziyeScribuntoHooks::unitTestsList() (common/Hooks.php içinde) eklenmelidir; uzantıları test durumunu kendiUnitTestsList 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''ClassName''TestextendsScribunto_LuaEngineTestBase{protectedstatic$moduleName='<i>ClassName</i>Test';functiongetTestModules(){returnparent::getTestModules()+array('<i>ClassName</i>Test'=>__DIR__.'/<i>ClassName</i>Tests.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:
n, the name of testn, and a string that is the expected output for testn.n and returns one string.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:
localtestframework=require'Module:TestFramework'returntestframework.getTestProvider({-- Testler buraya gider})
Her testin kendisi, aşağıdaki özelliklere sahip bir tablodur:
Tür,expect biçimini vefunc öğesinin nasıl çağrıldığını denetler. Dahil edilen türler:
expect is a table of return values, or a string if the test should raise an error.func is simply called.expect is a table of tables of return values.func is called as with aniteratedfor loop, and each iteration's return values are accumulated.tostring().PHPUnit testlerini çalıştırmanın (en az) iki yolu vardır:
--filter seçeneği yalnızca uzantınızın testlerini çalıştırmak için kullanılabilir.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.
AncakJenkins 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çinGerrit 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;}
Scribunto'da bulunan modüller, yukarıdakiScribunto 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ıdakiUzantı kitaplıkları alt bölümündeki dokümanlara bağlantı vermelidir.
Bu kılavuz,MIT lisansı altında bulunanLua 5.1 kaynak kılavuzundan türetilmiştir.
| Copyright © 1994–2012 Lua.org, PUC-Rio. Bu yazılımın ve ilişkili belgelendirme dosyalarının ("Yazılım") bir kopyasını alan herhangi bir kişiye, kullanma, kopyalama, değiştirme, birleştirme hakları da dahil ancak bunlarla sınırlı olmamak üzere, herhangi bir sınırlama olmaksızın, Yazılım ile ilgili olarak erişim izni verilir. Yazılımın kopyalarını yayınlamak, lisanslamak ve/veya satmak ve Yazılımın sağlandığı kişilere aşağıdaki koşullara tabi olarak izin vermek için: Yukarıdaki telif hakkı bildirimi ve bu izin bildirimi, Yazılımın tüm kopyalarına veya önemli bölümlerine dahil edilecektir. YAZILIM, HERHANGİ BİR TÜR, AÇIK VEYA ZIMNİ GARANTİ OLMADAN "OLDUĞU GİBİ", TİCARİ OLABİLİR GARANTİ VE UYUMSUZLUK GARANTİSİ DAHİL OLMAKSIZIN "OLDUĞU GİBİ" SAĞLANMAKTADIR. HİÇBİR DURUMDA YAZARLARIN VEYA TELİF HAKKI TUTUCULARININ YAZILIM VEYA KULLANIM VEYA DİĞER BAĞLANTILARLA İLİŞKİN, SÖZLEŞME VEYA KULLANIM YA DA BAĞIMSIZ OLDUĞU GİBİ, HERHANGİ BİR TAZMİNAT, ZARAR VEYA DİĞER SORUMLULUK YAZILIM İÇİN SORUMLU OLMAYACAKTIR. Bu türev kitapçığı aynı lisansın koşulları altında da kopyalanabilir. |