Wikipedia:Lua
| WP:Lua Projek | WT:Lua Perbincangan | Modul | Bantuan | Sumber en: m: mw: external |
- Sublaman Projek
- m:Lua – Laman "pusat" di Meta-Wiki
- mw:Lua – indeks di www.mediawiki.org
| Laman ini merupakan sebuah laman maklumat yang menerangkan sepersetujuan komuniti para penyunting di sini bagi beberapa aspek tertentu tentang pengendalian Wikipedia. Laman ini BUKAN laman polisi atau garis panduan dan bertujuan untuk menerangkan amalan atau polisi lain Wikipedia. Sila rujuk polisi atau garis panduan yang berkaitan jika terdapat percanggahan antara laman ini dengan laman polisi atau garis panduan. |
| Ruang nama | |||
|---|---|---|---|
| Ruang nama subjek | Ruang nama perbincangan | ||
| 0 | (Utama/Rencana) | Perbincangan | 1 |
| 2 | Pengguna | Perbincangan pengguna | 3 |
| 4 | Wikipedia | Perbincangan Wikipedia | 5 |
| 6 | Fail | Perbincangan fail | 7 |
| 8 | MediaWiki | Perbincangan MediaWiki | 9 |
| 10 | Templat | Perbincangan templat | 11 |
| 12 | Bantuan | Perbincangan bantuan | 13 |
| 14 | Kategori | Perbincangan kategori | 15 |
| 100 | Gerbang | Perbincangan gerbang | 101 |
| 710 | TimedText | TimedText talk | 711 |
| 828 | Modul | Perbincangan modul | 829 |
| Tidak digunakan lagi | |||
| 2300 | Gajet | 2301 | |
| 2302 | Takrifan gajet | 2303 | |
| Tidak dipasang | |||
| 90 | Thread | Thread talk | 91 |
| 92 | Summary | Summary talk | 93 |
| 108 | Buku | 109 | |
| 118 | Draf | 119 | |
| 442 | Course | Course talk | 443 |
| 444 | Institution | Institution talk | 445 |
| 446 | Program pendidikan | 447 | |
| 2600 | Topic | 2601 | |
| Ruang nama maya | |||
| -1 | Khas | ||
| -2 | Media | ||
| Senarai semasa (panggilan API) | |||
Lua ialah sebuah bahasa pengaturcaraan yang sekarang disediakan buat tapak-tapak Wikipedia melalui penyambung MediaWiki, Scribunto. Kod Lua sekarang boleh dibenamkan dalam templat wiki dengan menggunakan fungsi {{#invoke:}} penyambung Scribunto buat MediaWiki.
"Helo, dunia!" dalam Lua
Kod sumber Lua disimpan dalam laman-laman yang digelar modul (contoh Modul:Pisang. Modul-modul ini kemudian dipanggil dengan "{{#invoke:}}") pada laman-laman templat (misalan, Module:Pisang/doc menggunakan kod {{#invoke:Pisang|helo}} bagi mencetak teks, "Helo, dunia!").
Anda tidak perlu memasang atau menyimpan apa-apa.
- Sunting halaman Pengguna anda.
- Tampalkan panggilan berikut pada permulaan baris baharu di halaman Pengguna anda:
{{#invoke:Pisang|helo}}
- Klik
Paparkan pralihat. Panggilan fungsihelodalam Modul:Pisang digantikan dengan yang berikut:
Helo, dunia!
- Klik
Batal. Apabila diminta, klikLeave. - Halaman Pengguna anda kekal tidak diubah suai.
- Modul:Pisang: Skrip paling mudah, menyediakan satu fungsi tanpa apa-apa argumen.
- Modul:PisangArgs: Memerikan bagaimana mengakses dan mengguna parameter.
Konsol penyahpepijatan: Mula belajar Lua
Scribunto Lua Konsol penyahpepijatan ialah alat interaktif yang selamat untuk mempelajari Lua di Wikipedia.
- Klik
Lihat sumberpada halaman Modul:Navbar. - Skrol ke bahagian bawah halaman ke seksyen
Konsol penyahpepijatan. - Tampalkan komen dan panggilan ke dalam kotak input kelabu (di atas butang
Padamkan).
--[[Program Hello World Lua pertama anda]]-- print("Selamat datang ke " .. _VERSION .. "!") -- Gabungkan versi Lua dengan `..`
- Tekan ↵ Enter sekali untuk melaksanakan kedua-dua arahan Lua.
- Keputusan akan muncul di bawah baris arahan
printLua:
Selamat datang ke Lua 5.1!
- Tekan ↑
Anak panah atasuntuk menelusuri arahan Lua sebelumnya. - Sebagai pilihan, klik
Padamkanuntuk mengosongkan hanyaKonsol penyahpepijatan; penyunting Lua di atas akan kekal tidak diubah suai.
- Penjana HTML dalam Konsol penyahpepijatan
Panggil fungsi helo dalam Modul:Pisang:
local modHelo = require('Modul:Pisang') -- muatkan modul dalam Konsol penyahpepijatan local frame = mw.getCurrentFrame(); print(modHelo.helo(frame)) -- paparkan "Helo, dunia!"
Helo, dunia!
- Fungsi identiti
callParserFunction #if
local modYesno = require('Modul:Yeukon') -- #if jika yesno kemudian memulangkan parameter inputnya print(mw.getCurrentFrame():callParserFunction("#if", modYesno("Ya"), "Ya", 'tidak')) print(mw.getCurrentFrame():callParserFunction("#if", modYesno('tidak'), "Ya", 'tidak'))
Ya tidak
- Tutup
Modul:Navbar yang dilindungi dan kekal tidak diubah suai.
Scribunto vs. Lua
print() tidak boleh dijalankan dalam modul, tetapi boleh dijalankan dalam konsol penyahpepijatan.
Gunakan sebaliknya: mw.log("mesej: " .. NilaiRentetan)
Scribunto lebih selamat: lihat Perbezaan daripada Lua standard untuk senarai penuh.
Utamakan mw.ustring berasaskan Unicode berbanding string berasaskan ASCII.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
--[[ASCII]]-- local content_lang = mw.getContentLanguage().code -- ms local lang = mw.getCurrentFrame():callParserFunction("#language", content_lang) local lenUnicode, lenByte, lenSharp = mw.ustring.len(lang), string.len(lang), #lang print(("lang: \"%s\". Mw.ustring.len = %d String.len = %d Sharp = %d"):format(lang, lenUnicode, lenByte, lenSharp)) --[[UNICODE]]-- lang = "بهاس ملايو" -- Tulisan Jawi lenUnicode, lenByte, lenSharp = mw.ustring.len(lang), string.len(lang), #lang print(("lang: \"%s\". Mw.ustring.len = %d String.len = %d Sharp = %d"):format(lang, lenUnicode, lenByte, lenSharp))
Konsol penyahpepijatan menyokong Unicode, tetapi tidak menyokong teks dari kanan ke kiri:
lang: "Bahasa Melayu". Mw.ustring.len = 13 String.len = 13 Sharp = 13 lang: "بهاس ملايو". Mw.ustring.len = 10 String.len = 19 Sharp = 19
| ASCII | Bahasa | Arah | Unicode | Panjang dalam Bait |
|---|---|---|---|---|
| Malay | Bahasa Melayu. | → Kiri ke kanan | 13 | 13 |
| Tulisan Jawi | بهاس ملايو. | ← Kanan ke kiri | 10 | 19 |
Had kekangan input Lua dalam Scribunto
Atur cara hanya dijalankan apabila halaman itu "diparse" (iaitu apabila ia atau halaman yang dihasilkannya disertakan diubah atau dipratonton), bukan setiap kali anda memaparkan hasilnya.
Oleh itu, tidak mungkin ada modul Lua yang mudah yang membolehkan anda menaip suhu Fahrenheit dalam kotak input dan mendapatkan kembali suhu Celsius yang sepadan apabila anda menekan butang, atau yang membolehkan anda mengklik pada satu segmen visualisasi set Mandelbrot pada halaman untuk mengembangkannya sesuka hati. Mesti ada halaman Wiki yang sebenar (atau sekurang-kurangnya halaman yang telah anda hantar untuk pratonton) yang mengandungi data input.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
local function toCelsius(tempFahrenheit) return (tempFahrenheit - 32) * 5 / 9 end print(("toCelsius(32°F) = %s°C. toCelsius(68°F) = %d°C"):format(toCelsius(32), toCelsius(68)))
toCelsius(32°F) = 0°C. toCelsius(68°F) = 20°C
Namun, adalah mungkin untuk menggunakan fungsi perpustakaan seperti mw.title.getCurrentTitle() untuk mendapatkan tajuk modul semasa.
print(mw.title.getCurrentTitle()) print(mw.getCurrentFrame():preprocess('{{PAGENAME}}'))
Modul:Navbar Navbar
Namun, anda tidak boleh mengimport data daripada fail, malah fail .svg yang mengandungi data teks XML.
Memanggil modul Lua
Panggilan Lua kelihatan hampir sama seperti WP:templat, dan terdiri daripada sekeping teks yang kecil.
Sunting halaman Pengguna anda.
{{#invoke:ConvertNumeric|decToHex|73}}
Klik Paparkan pralihat atau klik sunting sumber seksyen ini untuk melihat panggilan itu kemudian Batal:
49
Teks ini memanggil skrip Lua itu sendiri, yang terletak dalam ruang nama Modul:. Kesan panggilan ini ialah menghantar maklumat dalam blok #invoke kepada modul Lua, dan menggantikan segala-galanya dalam tanda kurung dengan sebahagian teks yang dipulangkannya sebagai balasan. Secara literal, dalam pernyataan return.
{{#invoke:NamaModul|fungsi|parameter}}
Perhatikan bahawa "parameter" pertama, dalam kes ini decToHex, sebenarnya ialah sebuah fungsi yang dipanggil dalam modul Lua. Medan ini mesti sentiasa disertakan dalam mana-mana #invoke. Bagi mereka yang tidak biasa dengan modul, khususnya penyunting templat Wikipedia yang menjangka apa-apa selepas | sebagai parameter, keperluan medan tambahan ini agak mengejutkan, terutamanya jika semua penggunaan modul bergantung pada kehadirannya.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
local convNum = require('Modul:ConvertNumeric') local frame = mw.getCurrentFrame(); frame.args[1] = "73" -- Nombor sentiasa sebagai rentetan print(("0x%s = %s = %d"):format(convNum.decToHex(frame), string.format("0x%X", 73), 0x49))
0x49 = 0x49 = 73
Sunting halaman Pengguna anda.
{{#invoke:ConvertNumeric |numeral_to_english |57000 |round=on |plural=on}}
Klik Paparkan pralihat atau klik sunting sumber seksyen ini untuk melihat panggilan itu kemudian Batal:
enam puluh ribu
Terdapat dua jenis parameter: kekunci bernombor (kedudukan) dan kekunci bernama.
- Parameter tidak bernama muncul dengan nombor sebagai kekunci:
frame.args[1].
Rentetan"57000"ialah kandunganframe.args[1], yang sama denganframe["args"][1]
tetapi bukan sama denganframe.args["1"]atauframe["args"]["1"]. - Parameter bernama muncul dengan nama parameter (rentetan) sebagai kekunci:
frame.args["round"],frame.args["plural"].
Dalam konsol penyahpepijatan bagi Modul:Navbar:
--[[Tukarkan nombor kepada huruf]]-- local convNum = require('Module:ConvertNumeric') local frame=mw.getCurrentFrame(); frame.args = {"57000", round="on", plural="on"} print(convNum.numeral_to_english(frame) .. " dibundarkan daripada 57,000.") local debugLog = {} -- jadual laporan kosong for key, val in pairs(frame.args) do -- untuk setiap argumen debugLog[#debugLog + 1] = ("args[%s] = %s"):format(key, val) end -- ^panjang. -- Menambah laporan lebih pantas daripada berasaskan rentetan: debugLog = debugLog .. string print(table.concat(debugLog, ". ")) -- Gabungkan dengan pemisah mw.logObject(frame.args) -- Alat Scribunto untuk memaparkan jadual
enam puluh ribu dibundarkan daripada 57,000. args[1] = 57000. args[plural] = on. args[round] = on table#1 { "57000", ["plural"] = "on", ["round"] = "on", }
Meminta skrip
Lawati (Inggeris) en:Wikipedia:Lua requests bagi memohon bantuan dalam penulisan skrip Lua bagi melaksanakan tugas tertentu di Wikipedia atau projek Yayasan Wikimedia lain.
Sejarah
Sejarah buruk. {{qif}}, ParserFunctions, Lua extension, perdebatan penskripan wiki (JavaScript v. Lua), mw:Extension:WikiScripts, Tim menulis Scribunto dengan sokongan awal untuk Lua.
Selepas perbincangan bertahun-tahun, Lua dipasang pada tahun 2012 di test2.wikipedia.org, dengan jemputan terbuka kepada semua penyunting untuk menguji pembangunan modul-modul Lua. Lua dipasang pada Wikipedia bahasa Inggeris pada Februari 2013 selepas ujian di mediawiki.org dan wiki-wiki ujian Wikimedia.
Tentang Lua
Lua ialah sebuah bahasa penskripan yang dapat digunakan untuk menganalisis data, mengira ungkapan, dan memformat keputusan menggunakan fungsi atau pengaturcaraan berorientasi objek. Walaupun sesetengah skrip Lua dapat dikekalkan ringkas agar memudahkan pemahaman, Lua membenarkan pengatucaraan struktur-struktur kompleks yang boleh mencabar seorang ahli sains komputer, dengan jadual, fungsi-fungsi dinamik, dan tatasusunan bersekutu yang membolehkan subskrip indeks boleh terdiri daripada perkataan selian nombor-nombor indeks.
Lua juga menyokong rekursi fungsi bersarang, justeru pengaturcaraan terlalu kompleks harus dielakkan agar pengguna-pengguna lain dapat memahami bagaimana sesuatu modul Lua dapat disenggara. Berikut ialah sebuah contoh kod sumber Lua bagi fungsi helo yang terkandung dalam Modul:Pisang#L-4.
Semua modul Lua di Wikipedia perlu bermula dengan definisi pemboleh ubah yang akan memegang:
fungsi-fungsi luar yang dapat diakses. Modul boleh diberi nama dan menyimpan data.
Menambah fungsi pada pemboleh ubah. Ini dapat dipanggil di Wikipedia dengan perintah "#invoke".
Parameter input frame akan mengandubgi data yang dikirim Wikipedia kepada fungsi ini apabila dipanggil.
--[[Modul:Pisang]]--
local p = {} -- Inisialisasikan jadual (p)akej yang wajib
function p.helo(frame) -- Jika tidak digunakan, parameter input `frame` boleh diabaikan.
-- Pengisytiharan pemboleh ubah lokal dan mengumpukkan data padanya.
local str = "Helo, dunia!" -- Fungsi "print" (cetak) tidak dibenarkan,
-- jadi semua output dilaksanakan melalui memulangkan rentetan dengan cara ini.
return str -- Hentikan fungsi ini dan kirim maklumat dalam "str" balik kepada WP
end -- Hentikan fungsi.
return p -- Memulangkan jadual (p)akej
Kita sekarang boleh mengguna modul ini dengan memanggil {{#invoke:Pisang|helo}}.
Perintah #invoke bermula dengan nama modul, dalam kes ini, "Pisang", kemudian ia mengambil nama satu daripada fungsinya sebagai argumen, dalam kes ini helo.
Sampel Lua terserlah dengan tag <syntaxhighlight lang="lua" line highlight=1 copy> ... </syntaxhighlight> yang diletakkan sebelum dan selepas kod sumber Lua. Contoh Lua yang lebih kompleks dapat dilihat dalam rencana: Lua.
Panduan bagaimana mengguna Lua dalam MediaWiki dapat dilihat di mw:Extension:Scribunto/Lua reference manual.
LuaCall: kata ganda penuh
- Unicode
mw.ustring.gsub
Mungkin anda hanya mempunyai satu pengiraan kecil yang ingin anda gunakan Lua untuknya, tetapi tidak mahu menulis modul penuh.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
local capturedWord = "%1" -- ungkapan yang ditangkap antara kurungan sebelumnya local pluralRegex = "(%a+)%-" .. capturedWord -- "(%a+)" sepadan dengan satu perkataan. -- ^melarikan sempang "-" -- There are those books. print(mw.ustring.gsub("Ada buku-buku itu.", pluralRegex, capturedWord) .. " There is that book.") -- All the people. print(mw.ustring.gsub("orang-orang", pluralRegex, capturedWord) .. ": person.")
Ada buku itu. There is that book. orang: person.
Anda mungkin mendapati Modul:LuaCall sesuai untuk ini.
Sunting halaman Pengguna anda:
{{#invoke:LuaCall|main|subjectStr=Ada buku-buku itu.|pattern=(%a+)%-%1|replace=%1|mw.ustring.gsub(subjectStr,pattern,replace)|lua}}
Ada buku itu.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
--[[Mengikut bilangan buku, pilih tunggal atau jamak]]-- local bookRoot = "buku"; local particleDash = "-" local pluralMarker = bookRoot .. particleDash .. bookRoot -- Penggandaan penuh local bookSingular = "Ada " .. bookRoot .. " itu." -- Ada buku itu. local booksPlural = "Ada " .. pluralMarker .. " itu." -- Ada buku-buku itu. print("There are those books:") -- jamak untuk 42 buah buku print(mw.getCurrentFrame():callParserFunction("plural", {'42', bookSingular, booksPlural})) --[[Gantikan penanda jamak dengan bentuk tunggal]]-- local function buildFrame(templateTitle, parentArgs, moduleName, childArgs) local root = mw.getCurrentFrame() local parent = root:newChild{title=templateTitle, args=parentArgs or {}} return parent:newChild{title=moduleName, args=childArgs or {}} end local globalSub = "mw.ustring.gsub(subjectStr,pattern,replace)" -- tiada pemisah ruang local capturedWord = "%1" -- ungkapan yang ditangkap antara kurungan sebelumnya local pluralRegex = "(%a+)%-" .. capturedWord -- "(%a+)" sepadan dengan satu perkataan. -- ^"%-" melarikan sempang "-" local prm = {subjectStr=booksPlural, pattern=pluralRegex, replace=capturedWord, globalSub, "lua"} local moduleName = 'Modul:LuaCall' local frame = buildFrame(moduleName, prm, moduleName) print("There is that book:\n"..require(moduleName).main(frame)) -- tunggal
There are those books: Ada buku-buku itu. There is that book: Ada buku itu.
Skrip di Modul:LuaCall telah ditulis untuk menerima apa-apa set parameter bernama prm1=value1,prm2=value2:
- Bagi parameter input
prm1, rentetanvalue1disimpan dalam pemboleh ubah bernamaprm1. - Ini membolehkan anda menggunakan pemboleh ubah ini sebagai parameter untuk mana-mana fungsi yang tersedia dalam Lua.
- Skrip itu kemudian mengembalikan hanya nilai pertama yang dipulangkan oleh fungsi. Apabila fungsi Lua mengembalikan beberapa nilai, hanya yang pertama dipulangkan oleh modul.
Ujian unit
Kerangka ujian unit buat skrip Lua di Wikipedia disediakan di Modul:UnitTests. Ia membenarkan anda untuk melaksana skrip berasaskan set input dan sahkan yang output yang disangkakan dihasilkan skrip. Ujian unit berguna terutamanya bagi mengesan regresi hasil timbulnya masalah baharu ekoran pengubahsuaian skrip.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
local self = { preprocess_equals = function(_, wikitext, expected) local got = mw.getCurrentFrame():preprocess(wikitext) print('"' .. expected .. '": Hasil yang sepatutnya') -- Expected print('"' .. got .. '": Tetapi inilah hasil sebenar') -- Actual return got == expected end } -- `:` pemisah titik dua print(self:preprocess_equals( '{{#invoke:Pisang|helo}}', 'Helo, dunia!')) -- `.` pemisah titik print(self.preprocess_equals(self, '{{#invoke:Pisang|helo}}', 'Helo, dunia!'))
"Helo, dunia!": Hasil yang sepatutnya "Helo, dunia!": Tetapi inilah hasil sebenar true "Helo, dunia!": Hasil yang sepatutnya "Helo, dunia!": Tetapi inilah hasil sebenar true
Mengikut resam, ujian unit bagi modul seperti Modul:Pisang diletakkan dalam Modul:Pisang/kes_ujian, dan dilaksanan pada Perbincangan modul:Pisang/kes ujian dengan contohnya, {{#invoke:Pisang/kes_ujian|laksan_ujian}}.
Kaedah ujian perlu bermula dengan "ujian". Contoh ringkas daripada Modul:Pisang/kes_ujian seperti di bawah.
Awalan test_ dalam nama fungsi adalah wajib:
--[[Modul:Pisang/kes_ujian]]--
local p = require('Modul:UnitTests')
-- Petik halaman perbincangan untuk melaksana ujian.
function p:test_hello() -- Ujian unit bagi [[Modul:Pisang]].
self:preprocess_equals('{{#invoke:Pisang|helo}}', 'Helo, dunia!')
end
return p
Sunting halaman Pengguna anda:
{{#invoke:Pisang/kes_ujian|run_tests}}
Semua ujian lulus.
test_hello:
Teks Hasil yang sepatutnya Tetapi inilah hasil sebenar ![]()
{{#invoke:Pisang | helo}} Helo, dunia! Helo, dunia!
Dalam konsol penyahpepijatan bagi Modul:Navbar:
local modTest = require('Modul:Pisang/kes_ujian') print(modTest.run_tests(mw.getCurrentFrame()))
<font color="#008000">'''Semua ujian lulus.'''</font> '''test_hello''': {|class="wikitable" ! !! Teks !! Hasil yang sepatutnya !! Tetapi inilah hasil sebenar |- | [[File:Yes check.svg|20px|link=|alt=☑]]<span style="display:none">Y</span> | {{#invoke:Pisang | helo}} | Helo, dunia! | Helo, dunia! |- |}
Menjalankan test_hello() dalam konsol penyahpepijatan tanpa menyimpan Modul:Pisang/kes ujian khusus:
local modTest = require('Modul:UnitTests') function modTest:test_hello() self:preprocess_equals('{{#invoke:Pisang|helo}}', 'Helo, dunia!') end print(modTest.run_tests(mw.getCurrentFrame()))
HTML yang dihasilkan adalah sama.
Lihat senarai modul Lua yang menggunakan ujian unit.
Ciri-ciri khusus buat Wikipedia
Keseluruhan: Lua hanya dapat mendapatkan input sebagai rentetan teks yang dihulurkan kepada {{#invoke:}} dan apa yang dapat diambil melalui frame:expandTemplate, frame:preprocess, dan sebagainya. Pada Wikipedia, Lua hanya menghasilkan output berbentuk teks wiki, tidak termasuk jelmaan prasimpanan atau transklusi dan binaan {{...}} lain. Juga, semua Lua yang terdapat pada laman dihadkan dengan masa CPU selama 10 saat (anda boleh melihat masa yang diambil bagi menghurai templat atau modul dalam kod sumber laman yang dipaparkan). Dan relatif berbanding Lua piawai, Lua Scribunto kekurangan pelbagai fungsi (lihat mw:Extension:Scribunto/Lua reference manual#Differences from standard Lua).
Teks wiki
Pengepala Wikipedia yang ditransklusi sering mengandungi kod tersorok seperti "UNIQ5ae8f2aa414ff233-h-3--QINU" yang mungkin perlu dibuang agar dapat dihurai dengan berkesan.
print(string.reverse("UNIQ"))
QINU
Pautan wiki jenis [[WP:Bantuan|]] tidak akan berkesan jika dipulangkan sebagai output – pautan-pautan ini perlu ditulis secara tersurat seperti [[WP:Bantuan|Bantuan]].
Jelmaan prasimpanan lain, seperti penggantian ~~~~ dengan tandatangan, juga tidak akan diproses. Transklusi templat, panggilan fungsi penghurai, dan penggantian pemboleh ubah (yakni apa-apa yang memiliki {{...}}) tidak akan diproses, dan begitu juga tag seperti <ref> atau <nowiki>.
Cite book
Sunting halaman Pengguna anda: Templat:Cite book
# {{cite book |last=Cooper |first=Barry |year=2008 |title=Beethoven |language=en |publisher=Oxford University Press |location=Oxford |isbn=978-0-19-531331-4}}
- Cooper, Barry (2008). Beethoven (dalam bahasa Inggeris). Oxford: Oxford University Press. ISBN 978-0-19-531331-4.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
local function buildFrame(templateTitle, parentArgs, moduleName, childArgs) local root = mw.getCurrentFrame() local parent = root:newChild{title=templateTitle, args=parentArgs or {}} return parent:newChild{title=moduleName, args=childArgs or {}} end local prm = {last="Cooper", first="Barry", year="2008", title="Beethoven", language="en", ["publication-place"]="Oxford", publisher="Oxford University Press", isbn="978-0-06-019046-0" } local moduleName = "Modul:citation/CS1"; local childArg = {CitationClass = "book"} local frame = buildFrame("Templat:Cite book", prm, moduleName, childArg) print("1. " .. require(moduleName).citation(frame))
HTML yang dijana bermula dengan:
1. <DEL>'"`UNIQ--templatestyles-00000000-QINU`"'<DEL><cite id="CITEREFCooper2008" class="citation book cs1">Cooper, Barry (2008). ''Beethoven'' (dalam bahasa Inggeris). Oxford: Oxford University Press. [[Nombor Buku Piawai Antarabangsa|ISBN]] [[Special:BookSources/978-0-06-019046-0|<bdi>978-0-06-019046-0</bdi>]].</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Beethoven&rft.place=Oxford&rft.pub=Oxford+University+Press&rft.date=2008&rft.isbn=978-0-06-019046-0&rft.aulast=Cooper&rft.aufirst=Barry&rfr_id=info%3Asid%2Fms.wikipedia.org%3AModul%3ANavbar" class="Z3988"></span>[[Kategori:sumber CS1 bahasa Inggeris (en)]]
- Kod tersembunyi
"UNIQ--templatestyles.*-QINU"antara penanda 0x7FDELyang tidak mencetak ditanggalkan dengan"<DEL>". <cite id="CITEREFCooper2008"untuk Catatan Kaki Pendek Templat:Sfn.
--[[ {{sfn|Cooper|2008|p=41}} ]]-- local moduleName = 'Harvard citation/core' local sfnPrm = {P1='Cooper', P2='2008', Pages='41'} print(mw.getCurrentFrame():expandTemplate{title = moduleName, args = sfnPrm})
Pautan #{{{REF}}} akan berkembang kepada "CITEREF" + pengarang + tahun buku:
[[#{{{REF}}}|Cooper 2008]]41
Klik Ludwig van Beethoven#CITEREFCooper2008 untuk memilih buku dalam Buku dan laman rujukan.
Ralat skrip
Ralat Lua muncul sebagai mesej merah "Ralat skrip". Jika JavaScript dibolehkan, mesej ralat skrip merah ialah pautan yang biasanya membolehkan anda menjejaki semula ke baris dalam modul tempat ralat itu berlaku. Ada beberapa pengecualian, contohnya "Module not found" jika nama modul itu sendiri tersalah taip, atau "The function you specified did not exist" jika nama fungsi yang diberikan tidak sah.
Beberapa pepijat yang mungkin anda perlu ambil kira:
- Tidak boleh memanggil modul
Sunting halaman Pengguna anda.
# {{#invoke:ConvertNumericTidakDiketahui|decToHex|73}} # {{#invoke:ConvertNumeric|decToHexTidakDiketahui|73}}
- Ralat skrip: Modul "ConvertNumericTidakDiketahui" tidak wujud.
- Ralat skrip: Fungsi "decToHexTidakDiketahui" tidak wujud.
- tiada modul sedemikian. Anda memanggil
#invoke:NamaModulTidakDiketahuiyang tidak wujud atau anda tersilap mengekalkan awalanModul:dengan menulis#invoke:Modul:NamaModul. - fungsi yang dinyatakan tidak wujud.
Anda memanggil#invoke:NamaModul|namaFungsiTidakDiketahui, tetapi medan selepas nama modul adalah salah.
Selalunya medan ini mengharapkan nama standard sepertimain, dan anda terlupa memasukinya lalu terus ke parameter data pertama.
Jika anda tidak pasti nama fungsi, semak dokumentasi modul, atau cari fungsi/fungsi dalam kod yang menerima parameterframe.
- Isu limpahan grafik
Sesetengah grafik yang anda cuba paparkan menjauh ke bukit: sebenarnya ralat HTML.
Anda tidak menutup satu </div>, jadi semua gaya top: dan left: terus ditambah bertindih.
Dalam konsol penyahpepijatan bagi Modul:Navbar:
- Pengendali untuk penggabungan hilang
local debugLog = "" -- rentetan laporan kosong debugLog = debugLog "tiada titik berganda" -- tambah kepada laporan
Maksudnya anda terlupa .. antara rentetan dan pemboleh ubah di suatu tempat dalam kekusutan yang anda sedang gabungkan.
Ralat Lua pada baris 8 di console input: attempt to call local 'debugLog' (a string value).
Ralat Lua dalam input konsol pada baris 8: cuba memanggil local 'debugLog' (nilai rentetan).
- Rentetan dijangka, dapat fungsi
local debugLog = "" -- rentetan laporan kosong local res = mw.ustring.gmatch("Helo, dunia!", "([aeiouAEIOU])") -- lelaran (iterator) bagi vokal debugLog = debugLog..res -- isi laporan dengan hanya rentetan
Beberapa perkara penting seperti mw.ustring.gmatch sebenarnya mengembalikan fungsi, bukan rentetan.
Ralat Lua pada baris 9 di console input: attempt to concatenate local 'res' (a function value).
Ralat Lua dalam input konsol pada baris 9: cuba menggabungkan local 'res' (nilai fungsi).
- Pemboleh ubah mengabaikan tugasan
Sebuah pemboleh ubah mengabaikan semua usaha anda untuk memberi nilai kepadanya:
local debugLog = "peringkat atasan" -- nilai awal do local debugLog = "peringkat bersarang" -- tetapkan nilai baharu print("Dalam do: "..debugLog) end print("Di luar do: "..debugLog) -- dapatkan nilai lama
Anda mungkin tanpa sedar telah menulis dua kenyataan local—satu yang menetapkan nilai pemboleh ubah dalam kawasan yang terhad, dan apabila atur cara keluar daripada kawasan itu, anda kembali kepada nilai lama.
Dalam do: peringkat bersarang Di luar do: peringkat atasan
- Entri jadual bernombor mengabaikan semua usaha anda untuk memberi nilai kepadanya
local table = {}; local arg = "50"; local valPrm = tonumber(arg) table[arg] = "index sebagai rentetan" table[valPrm] = "index sebagai nombor" print(table[arg] == table[valPrm])
Ini kerana table["50"] bukan table[50].
Biasanya anda telah memproses satu parameter (yang mungkin anda terima daripada #invoke sebagai rentetan) dengan fungsi rentetan di satu tempat, tetapi melakukan operasi numerik di tempat lain, lalu meninggalkan anda dengan dua jenis nilai pemboleh ubah yang berbeza untuk digunakan sebagai indeks.
false
salah
nildan perangkap biasa
Terdapat pelbagai perkara yang anda tidak boleh lakukan dengan pemboleh ubah setempat yang diisi nil, seperti: local x = nil, contohnya:
- Beri tugasan kepada
x.sesetengahMedan - Dapatkan nilai pada indeks
x[idx] - Gabungkan
x .. "Tidak boleh menggabungkan dengan nil" - Nilai
table[x]
Inisialisasikan pemboleh ubah seperti ini dengan: local x={}; local table = {}
Selalunya "global" disebut dalam ralat ini kerana anda tidak mempunyai pernyataan local untuk pemboleh ubah nil.
Pelabelan templat yang diubah
Sila letakkan templat {{Lua}} pada semua templat yang mengguna Lua. Hal ini akan membantu penyampaian maklumat tentang penggunaan Lua dan pengubahan templat. Ia kelihatan seperti ini:
| Templat ini menggunakan Lua: |
Lihat juga
- Senarai modul Lua: semua laman dengan awalan
Modul: - Modul:Sandbox menyediakan ruang nama untuk bereksperimen dengan modul Lua pada halaman pengguna anda.
- Wikipedia Inggeris
- mw:Manual:Coding conventions/Lua: piawaian untuk meningkatkan kebolehbacaan kod melalui konsistensi
- en:Help:Lua debugging: panduan cara untuk nyahpepijat (debug) modul Lua
- en:Category:Lua-based templates: kumpulan templat berasaskan Lua
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.