Wikipedia:Lua

 WP:Lua
Projek
 WT:Lua
Perbincangan
 Modul
 
 Bantuan
 
 Sumber
en: m: mw: external
 
Struktur data Wikipedia
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.

  1. Sunting halaman Pengguna anda.
  2. Tampalkan panggilan berikut pada permulaan baris baharu di halaman Pengguna anda:
{{#invoke:Pisang|helo}}
  1. Klik Paparkan pralihat. Panggilan fungsi helo dalam Modul:Pisang digantikan dengan yang berikut:
Helo, dunia!
  1. Klik Batal. Apabila diminta, klik Leave.
  2. 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.

  1. Klik Lihat sumber pada halaman Modul:Navbar.
  2. Skrol ke bahagian bawah halaman ke seksyen Konsol penyahpepijatan.
  3. 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 `..`
  1. Tekan Enter sekali untuk melaksanakan kedua-dua arahan Lua.
  2. Keputusan akan muncul di bawah baris arahan print Lua:
Selamat datang ke Lua 5.1!
  1. Tekan Anak panah atas untuk menelusuri arahan Lua sebelumnya.
  2. Sebagai pilihan, klik Padamkan untuk mengosongkan hanya Konsol 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
  1. 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
Arah Unicode
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.

  1. Parameter tidak bernama muncul dengan nombor sebagai kekunci: frame.args[1].
    Rentetan "57000" ialah kandungan frame.args[1], yang sama dengan frame["args"][1]
    tetapi bukan sama dengan frame.args["1"] atau frame["args"]["1"].
  2. 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

Lihat juga penyampaian ringkas Brad Jorsch berkaitan contoh asas bagaimana mengubah templat teks wiki kepada modul Lua (PDF).

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:

  1. Bagi parameter input prm1, rentetan value1 disimpan dalam pemboleh ubah bernama prm1.
  2. Ini membolehkan anda menggunakan pemboleh ubah ini sebagai parameter untuk mana-mana fungsi yang tersedia dalam Lua.
  3. 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
☑Y {{#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=&#9745;]]<span style="display:none">Y</span> 
| &#123;&#123;#invoke:Pisang &#124; helo&#125;&#125; 
| 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}}
  1. 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]]&nbsp;[[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)]]
  1. Kod tersembunyi "UNIQ--templatestyles.*-QINU" antara penanda 0x7F DEL yang tidak mencetak ditanggalkan dengan "<DEL>".
  2. <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}}
  1. Ralat skrip: Modul "ConvertNumericTidakDiketahui" tidak wujud.
  2. Ralat skrip: Fungsi "decToHexTidakDiketahui" tidak wujud.
  1. tiada modul sedemikian. Anda memanggil #invoke:NamaModulTidakDiketahui yang tidak wujud atau anda tersilap mengekalkan awalan Modul: dengan menulis #invoke:Modul:NamaModul.
  2. fungsi yang dinyatakan tidak wujud.
    Anda memanggil #invoke:NamaModul|namaFungsiTidakDiketahui, tetapi medan selepas nama modul adalah salah.
    Selalunya medan ini mengharapkan nama standard seperti main, 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 parameter frame.


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

nil dan perangkap biasa

Terdapat pelbagai perkara yang anda tidak boleh lakukan dengan pemboleh ubah setempat yang diisi nil, seperti: local x = nil, contohnya:

  1. Beri tugasan kepada x.sesetengahMedan
  2. Dapatkan nilai pada indeks x[idx]
  3. Gabungkan x .. "Tidak boleh menggabungkan dengan nil"
  4. 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:

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

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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.