WikiDer > Yordam: Lua-da disk raskadrovka - Vikipediya
WP: Lua (gapirish) | Yordam bering | Qilmoq | Resurslar mw: qo'llanma |
Ushbu yordam sahifasi, Yordam: Lua disk raskadrovka, yozuv masalalarini tushuntiradi Lua yozuvi va disk raskadrovka The manba kodi, xatolarni olib tashlash yoki ish faoliyatini yaxshilash uchun. Lua "yarim kompilyatsiya qilingan" talqin qilingan til bo'lgani uchun, u barcha keng tarqalgan sintaksis xatolarini oldindan ekranga chiqarmaydi va noto'g'ri yozilgan o'zgaruvchilarni aniqlamaydi, ular faqat "ko'rish paytida ko'rish vaqtida topiladi."Skript xatosi"xabari. Shuningdek, farqli o'laroq wp: andozalar tahrirlash-oldindan ko'rish orqali interaktiv ravishda ishga tushirilishi mumkin bo'lgan Lua skriptini shablonni ishlatadigan boshqa sahifani ko'rsatish-ko'rish (yoki oldindan ko'rishni ishga tushirish) orqali sinab ko'rish kerak. #invoke
Lua moduli tahrir qilinmoqda. Umuman olganda, bir vaqtning o'zida bitta kichik o'zgarishlarni amalga oshiring, shou-oldindan ko'rib chiqishni bajaring va bir nechta yaxshi o'zgarishlardan so'ng saqlang, agar keyingi ko'p sonli o'zgarishlardan keyin dahshatli xatolar yuzaga kelsa. Izoh: har bir versiyani modul tahririda saqlash o'rniga, ishchi nusxasini saqlash oflayn matnli faylda amalga oshirilishi mumkin.
Sintaksis xatosi yoki aniqlanmagan o'zgarmaydigan nomi aniqlangan boshqa oldindan tuzilgan yoki yarim kompilyatsiya qilingan tillar satr raqamini yoki kod iborasini aniq belgilashi mumkin; ammo, bu ishlov berish qo'shimcha vaqtni talab qilishi mumkin. Buning o'rniga, dan foydalanish mumkin bo'lishi mumkin leksik tahlil noto'g'ri yozilgan o'zgaruvchilarni yoki Lua manba kodidagi mantiqiy xatolarni yaxshiroq aniqlash va aniq aniqlash uchun Lua skriptiga mo'ljallangan vosita.
Ko'rishni oldindan ko'rish bilan ishga tushiring
Lua modullarida jonli o'zgarishlar tahrirlash paytida, oldindan ko'rib chiqish sifatida, andozalar / modullar uchun yangi oldindan ko'rish variantini ishlatib, shablon / moduldan foydalanadigan sahifaning "Oldindan ko'rishni ko'rsatish" uchun sinovdan o'tkazilishi mumkin. Aks holda, natijalarni ko'rish uchun Lua modullarini interaktiv ravishda boshqarish mumkin emas, bu faqat belgilashga asoslangan shablonlarda xususiyatdir. Buning o'rniga Lua modullari odatda tahrir qilinadi, saqlanadi va ishlaydi (chaqiruvchi shablon bo'yicha) tahrirlashda saqlash paytida yarim kompilyatsiya tomonidan har qanday sintaksis xatolarini aniqlash mumkinmi yoki yo'qligini ko'rish uchun. Shu bilan birga, oldindan ko'rib chiqishda oddiy sintaksis xatolari haqida xabar berilmasa ham, modulni jonli ravishda tahrirlashga imkon beradi, so'ngra qo'ng'iroq qilayotgan sahifaning "Ko'rib chiqishni ko'rsatish" -ni tanlaydi, natijalarni ko'rish uchun yoki oldindan ko'rish paytida "Skript xatosi" paydo bo'lsa, ko'pchilik marta, aslida tahrirni saqlashdan oldin. Biroq, tahrirni saqlash oddiy sintaksis xatolarini tekshirish uchun ba'zi yarim kompilyatsiya xabarlarini ko'rishning afzalliklarini beradi, masalan, "keyin u holda" nusxasi, ular oldindan ko'rish paytida xabar berilmaydi.
Skript xatolarining sabablari
Lua modulining xabarni ishga tushirishining sabablari ko'p bo'lishi mumkin "Skript xatosi"boshqa sahifada ishlaganda. Xato matnini bosish orqali Lua tomonidan ishlab chiqarilgan xato haqidagi xabarni o'z ichiga olgan popup paydo bo'ladi. Qidiruv tizimida bu xabar nimani anglatishini va umumiy davolash vositalarini to'liq tavsiflash uchun ishlatilishi mumkin. stack trace, aslida xatolikni keltirib chiqargan kod qismini aniqlashga yordam beradi.
Biroq, ba'zi xatolar boshqalarga qaraganda tez-tez uchraydi:
- Bo'sh satrning birikmasi noto'g'ri:
my_str = my_str .. "xx"
- "my_str" nomli satr satrlarni birlashtirish operatsiyasida ishlatilganda nol bo'lmasligi kerak. - ".." operatori tomonidan yaroqsiz birikma:
my_str = my_str + "z"
- Birlashtirish operatori ikki nuqta ".." va "+" ortiqcha belgisini ishlatishga urinish tahrirlash-saqlashning oldingi kompilyatsiyasi paytida o'tishi mumkin, ammo Lua skriptining ushbu qismi bajarilayotganda "Skript xatosi" ni urish mumkin. - Noto'g'ri funktsiya nomi:
len = string.long (my_str)
- Satr uzunligi operatori "#" xash belgisidir (quyidagicha:#my_str
) yoki funktsiyadan foydalaning 'string.len (my_str)
'lekin noma'lum funktsiyadan foydalanishga urinish'string.long (my_str)
'tahrirlash-saqlashning dastlabki kompilyatsiyasi paytida muvaffaqiyatli o'tadi, ammo Lua skriptining ushbu qismi bajarilganda "Skript xatosi" paydo bo'ladi.
- Bo'sh satrning birikmasi noto'g'ri:
Boshqa sabablari ham bor "Skript xatosi"lekin har doim o'rnatilmagan, boshlanmagan o'zgaruvchiga ega bo'lish uchun potentsialni qidiring, bu dasturni o'sha paytda to'xtatishi mumkin.
Qayta tiklanadigan barqaror versiyalarni saqlash
Bir vaqtning o'zida juda ko'p xatolarga duch kelmaslik uchun, umumiy strategiya bir vaqtning o'zida "bitta kichik o'zgarish" ni amalga oshirish, shou-preview dasturini bajarish va keyin bir necha yaxshi o'zgarishlardan so'ng ushbu sinovdan o'tgan versiyani saqlash uchun barqaror versiyaga ega bo'lishdir. agar ko'p sonli o'zgarishlardan so'ng dahshatli xatolar yuzaga kelsa. Izoh: har bir ishchi nusxani saqlash har bir versiyani Vikipediya moduli tahririda saqlash o'rniga, oflayn matnli fayllar to'plamida, ehtimol ularning har biri ma'lum versiya nomi (va ichki sharhlar) bilan amalga oshirilishi mumkin.
Qanday qilib disk raskadrovka qilish kerak
Oddiy ko'rib chiqish
Modulning bitta nuqtasida o'zgaruvchining qiymatini ko'rish uchun:
Kodni o'zgartirish
The xato ()
funktsiyasidan (modulning istalgan nuqtasi uchun) foydalanish mumkin. Shunday qilib, o'zgaruvchini bilish uchun (bu erda nomlangan var
) qiymati, faqat bilan modulda qator qo'shiladi xato (var)
zarur.
Ammo bu o'zgaruvchan jadval (yorliq
, keyingi tushuntirishda) mw.dumpObject (yorliq)
ishlatiladi yoki agar ichki jadvallar bo'lmasa, table.concat (tab, ',')
parametr sifatida ham ishlatilishi mumkin xato ()
funktsiya.
Kodni o'zgartirmasdan
Funktsiyalardan qaytarilgan o'zgaruvchilar va qiymatlarni olish uchun (har ikkala holatda ham mahalliy emas) "Debug konsol" dan foydalanish mumkin. "Debug console" modul sahifasida (tahrirlash holatida bo'lganda) quyida paydo bo'ladi. Keyin mw.log
, mw.logObject
va =
foydalanish mumkin. Keling, uning foydaliligini keyingi misolda ko'rib chiqaylik:
mahalliy p = {}p.Salom = 'Salom'funktsiya p.kalk(num) qaytish numoxirifunktsiya p.sum_mult(num) qaytish num + num, num * numoxirifunktsiya p.mtable(num) qaytish {num, num+1}oxiriqaytish p
"Debug Console" ga so'rovlar:
So'rov | Qaytgan qiymat |
---|---|
mw.log (salom) | "Salom" |
mw.log (p.calc (10/2)) | 5 |
mw.log (p.sum_mult (3)) | 6 9 |
mw.log (p.mtable (4)) | stol |
mw.logObject (p.mtable (4)) | jadval # 1 {
} |
= p.sum_mult (10) | 20 100 |
= Salom .. ', Dunyo!' | Salom Dunyo! |
. Debug konsolida so'rovlar saqlanmaydi, keyin ularni har bir modul modifikatsiyasida nusxalash yoki qayta yozish kerak bo'ladi.
Oqim va o'zgaruvchan qiymatlarni bir nechta nuqtalarda ko'rib chiqish
Funktsiyalari Modul: SimpleDebug yuqorida aytib o'tilgan holatlar uchun yoki yanada murakkab holatlar uchun ishlatilishi mumkin:
- Qachon o'zgaruvchilar yoki funktsiya tomonidan qaytarilgan qiymat (yoki qiymatlar) mahalliy bo'lsa.
- Dastur oqimi bir nuqtadan o'tib ketadimi-yo'qligini bilish uchun (siz belgilaydigan).
- Ko'chadan qaytarilgan qiymatlar sonini cheklash yoki qiymatlarni ro'yxatdan o'tkazishni ta'minlash uchun shartlarni o'rnatish.
Eski modullarni tuzatish
Ba'zi hollarda, Lua moduli eski harakat bo'lishi mumkin, ehtimol boshqa turli tahrirlovchilar tomonidan o'zgartirilgan va bir nechta noma'lum muammolar mavjud. Lua moduli ko'plab mantiqiy xatolarni va hatto noto'g'ri yozilgan o'zgaruvchini o'z ichiga olishi mumkin, agar modul to'g'ri ishlab chiqilmagan bo'lsa, dastlab ishlab chiqilgan barcha funktsiyalar uchun. Xabar "Skript xatosi"faqat sinov ma'lumotlari Lua kodining yaroqsiz qismini keltirib chiqarganda paydo bo'ladi, shuning uchun tekshirilmagan modulda ko'plab yashirin xatolar bo'lishi mumkin, faqat kengroq test ma'lumotlari manba kodining ko'proq maydonlarini faollashtirganda yoki ko'proq ichki funktsiyalardan foydalanilganda.
Umumiy va murakkab muammo, eski funktsiyalarni yangi xususiyatlar uchun kengaytirishga urinishdir, ammo kengaytirilgan funksiya qo'shilganda ba'zi oldingi, hal qilinmagan xatolar qanday paydo bo'lishini bilmaydi. Qanday qilib xatolar ko'pincha yangi qo'shilgan Lua yozuvida emas, aksincha yangi kod Lua skriptining boshqa qismlarini faollashtirganda tetiklanadigan (ajablanib) bo'ladigan eski bo'limlarda jimgina kutib turishiga e'tibor bering. Yashirin xato aniqlanmagan (yoki noto'g'ri yozilgan) o'zgaruvchan nom kabi oddiy bo'lishi mumkin, u asl qiymati bilan ishlangan, ammo yangi qo'shilgan funktsiyalar bilan foydalanilganda butunlay sirli natijalar paydo bo'ladi, go'yo yangi kod xatolarga yo'l qo'ydi, aslida, eski noto'g'ri yozilgan o'zgaruvchilar, boshqa sohalarda, yangi funktsiyalarning ishlashini butunlay axlatga tashladilar.
Qadimgi xatolar bilan ishlashning taktikasi - kod maydonlarini faollashtirish uchun maxsus qo'shimcha test ma'lumotlarini ishga tushirishni rejalashtirish yoki yangi Lua skriptini qo'shish mumkin bo'lgan disk raskadrovka natijalarini ko'rsatish. aqlni tekshirish juda ko'p yangi, batafsil mantiqni qo'shishdan oldin zarar ko'rgan hududlarning yaxshi ishlashi. Ko'pgina hollarda e'tibor bering: "korrektura - bu testning eng tezkor shakli " agar eskirgan manba kodining tafsilotlarini ko'rib chiqish uchun sabr-toqat yoki aqliy xotira kuchiga ega bo'lsangiz. Shu bilan birga, boshqa taktika - barcha tegishli ma'lumotlarning qiymatlarini ekranga tushiradigan disk raskadrovka-kodini ishga tushirish yoki kutilganidek mantiqning turli funktsiyalar bo'limlariga o'tishini ta'minlash uchun qo'ng'iroqlar ro'yxati bilan ta'minlash uchun test-ma'lumotlar qiymatlarini zaxiralash. Ko'pgina hollarda, inson xotirasi 5-9 o'zgaruvchidan kattaroq tafsilotlarga dosh berolmaydi va shuning uchun disk raskadrovka bayonotlarini Lua moduliga yozish uchun ko'proq vaqt kerak bo'lishiga qaramay, disk raskadrovka displeyi osonroq variantga aylanadi. Sekin-asta davom ettirishga ehtiyot bo'ling, chunki yangi Lua yozuvi juda ko'p miqdorda qo'shilsa, muammo eski Lua yozuvidagi xatolar tufayli emas, balki "barcha yangi narsalar" tufayli yuzaga kelganmi yoki yo'qmi, degan taxminiy o'yinga aylanishi mumkin.
Skriptni ishlab chiqish uchun shaxsiy qum qutisidan foydalanish
Ingliz Vikipediyasida Shablon Sandbox kengaytma o'rnatildi. "Andoza sandbox" va "Scribunto" kengaytmalari o'rtasida sinergiya mavjud bo'lib, u Lua modullarini global (masalan, foydalanuvchi maydonida) sahifalarida, ularni global makonga ko'chirishdan oldin ishlab chiqish va o'zgartirish imkonini beradi.
Lua modullarini ishlab chiqish uchun "Shablon Sandbox" dan foydalanish
Keling, amaliy misolni ko'rib chiqaylik. ushbu misol uchun foydalanuvchi ismingiz "Lua Developer" deb taxmin qiling. Aytaylik, xatolarni tuzatishni yoki takomillashtirishni sinab ko'rmoqchisiz Ip modul. Buni to'g'ridan-to'g'ri qila olmasligingizning ikkita sababi bor: ushbu modulda yuzlab shablonlar foydalanadigan, millionlab maqolalarda translyatsiya qilingan funktsiyalar mavjud. Har qanday xato Vikipediyada katta buzilishlarni keltirib chiqaradi. Ikkinchi sabab ko'proq prosaik: bu modul juda markaziy bo'lgani uchun u ham himoyalangan va bizning "Lua Developer" foydalanuvchimiz ushbu modulni o'zgartirish uchun kerakli ruxsatlarga ega emas.
Shunday qilib, "sandboxing" ning birinchi bosqichi nusxalashdir Modul: String shaxsiy sahifaga Foydalanuvchi: Lua Developer / sandbox / Module: String. Endi bizning ishlab chiqaruvchimiz modulni o'z xohishiga ko'ra tahrirlashi mumkin. Har qanday vaqtda u ochishi mumkin Maxsus: TemplateSandbox, odatiy "Sandbox prefiksi" dan foydalangan holda, u "User: Lua Developer / sandbox" bo'ladi. Bu shuni anglatadiki, har qanday ajratuvchi Shablonga duch kelganida, qum maydonidan har qanday sahifani ko'rish T yoki modul M, "User: Lua Developer / sandbox / Template: T" yoki "User: Lua Developer / sandbox / Module: M" deb nomlangan sahifa mavjudligini ko'rish uchun birinchi bo'lib ko'rinadi va agar mavjud bo'lsa, tahlilchi ularni tahlil qilish uchun ishlatadi. "haqiqiy" modul va shablon nomlari qatoridagi sahifalar o'rniga. "Sandbox prefiksi" ostida mavjud bo'lmagan har qanday shablon yoki modul ajratuvchi tomonidan tegishli nom maydonidan tortib olinadi.
Shablon qum maydonidan ishlab chiquvchi istalgan sahifani ko'rishi, shuningdek, vikitekstni kiritishi va "Sandbox prefiksi" ostida o'zi yaratgan soxta shablonlar va modullar yordamida ajraluvchidan uni tahlil qilishni so'rashi mumkin.
Kichik ogohlantirish: noto'g'ri ishning holati
Vikipediyada sahifa nomining kassasiga nisbatan kichik buzilish mavjud: u qanday kiritilganiga qaramay, sahifa nomining birinchi belgisini katta harfga o'zgartiradi. Buning o'rnini bosish uchun u shablonning birinchi harfini (o'zgartirilganda) va modulni (chaqirilganda) katta harfga o'zgartiradi. ammo, bu maxsus orqali ko'rib chiqiladigan User: namespace-da saqlangan modullarga taalluqli emas Shablon sandbox, chunki "birinchi harf" endi birinchi harf emas. Mana haqiqiy misol: haqiqiy modullar uchun aytaylik Modul: String, mediawiki dasturi "Mana men" qaytish uchun {{#invoke: String | replace | Hara I am | a | e}} dan foydalanishga imkon beradi (sinab ko'ring). Xuddi shu natijaga erishish uchun {{#invoke: string | replace | Hara I am | a | e}} dan foydalanishingiz mumkin:
vikitekst | natija |
---|---|
{{#invoke: String | almashtirish | Xara men | a | e}} | Mana men |
{{#invoke: string | almashtirish | Xara men | a | e}} | Mana men |
Ammo, agar bizning ishlab chiquvchi nomlangan sahifani yaratsa Foydalanuvchi: Lua Developer / sandbox / Module: string, u ushbu modulni biron bir tarzda chaqira olmas edi, chunki ajratuvchi qum qutisi prefiksi ostida "Module: string" emas, balki "Module: String" nomli sahifani qidiradi, Vikipediya bu nomni "Module:" ga o'zgartirmaydi. String "(chunki u faqat sahifa nomidagi 1-belgini o'zgartiradi) va uni topa olmaydi, shuning uchun modulni asosiy nom maydonidan oladi (agar bunday modul mavjud bo'lsa) yoki modul yo'qligidan shikoyat qiladi.
Katta / kichik harflar Modul: nomlar maydonida joylashgan oddiy ishlatishda ishlatiladigan barcha modullar uchun to'g'ri ishlangan.
Keng qamrovli disk raskadrovka kodini rejalashtirish
Strategiyaning yana bir masalasi sifatida disk raskadrovka bo'limlarini qo'shish Lua kodini sekinlashtirmaydi, chunki bu markirovka asosida shablonni bajarish tezligi bo'lishi mumkin, chunki Lua yuzlab if-shartlarni tez tezlikda qayta ishlashi mumkin. Hatto har bir Lua o'zgaruvchisi uchun qo'shimcha if-operatori qo'shilishi ham tezlikni biroz pasaytiradi, agar shablonni shablon ichiga o'xshash if-iboralar qo'shilsa, shablonni ehtimol 50% ga sekinlashtiradi. Lua moduliga disk raskadrovka-displeyning ko'plab bo'limlarini qo'shishni xohlang yoki bir nechtasini qo'shing parametrlarni tekshirish odatdagi yomon ma'lumotlarni aniqlash uchun o'zgaruvchilar qiymatlarini tekshirish uchun qo'shimcha if-операторlari sifatida sinovdan o'tkaziladi.
Vaqti-vaqti bilan xatolar
Lua dasturiy ta'minoti dastlab sahifani formatlashda barcha Lua kodlarini birgalikda ishlashi uchun kichik, 10 soniyali tanaffus chegarasi bilan tuzilgan edi. Taqqoslash uchun, belgilashga asoslangan shablonlar 60 soniyagacha vaqtni uzaytiradi (6 baravar yuqori vaqt chegarasi) va agar serverlar sekin ishlasa, shablonlar asosida 59 soniyagacha formatlash mumkin, ammo shablonlarning Lua qismlari bo'ladi. 10 soniya chegarasida to'xtadi. Xato xabari quyidagicha bo'lishi mumkin:
- Lua 'skript xatosi': "Ssenariylarni ishlashga ajratilgan vaqt tugadi."
Formatlangan sahifada belgilashga asoslangan shablonlardan farqli o'laroq, har bir chaqirilgan Lua moduli uchun "skript xatosi" mavjud bo'lib, ular sahifa keshi nusxasida saqlanishi kerak. Vaqt tugashining xavfliligi, 3x-4x sekinroq serverni kechiktirishning kamdan-kam uchraydigan davrida sodir bo'ladi, bu erda 3 soniyali Lua operatsiyasi band bo'lgan serverlar bilan 12 soniyagacha sekinlashishi va shu bilan "skript xatosi" ni saqlash uchun ishlov berishni o'chirib qo'yishi mumkin. minglab o'quvchilar ko'rishlari uchun formatlangan sahifa.
Umumiy harakatlar beqaror yoki ishonchsiz bo'lib tuyuladi, go'yo Lua to'satdan "juda charchagan" va shikoyat qilishni boshlagan sahifada "Skript xatosi" ni saqlagan holda shikoyat qila boshlaydi, uning o'rniga formatlangan matn kutilgan bo'lar edi. Vaqt tugashi bilan bog'liq muammo juda kam uchraydi va agar formatlangan maqolada sahifaning ichida "Skript xatosi" matni bo'lsa, ehtimol sahifani ozgina o'zgartirib, sahifani toza Lua bilan almashtirishga majbur qilish uchun biroz tahrir qiling.
Qo'llab-quvvatlash
Agar siz hali ham tiqilib qolsangiz va qanday harakat qilishni bilmasangiz, iltimos, bu haqda yozib qo'ying Vikipediya: Lua so'rovlari disk raskadrovka bo'yicha yordam so'rash.
Shuningdek qarang
- wp: Lua Vikipediyada - foydalanish to'g'risida insho Lua yozuvi Vikipediyada
- Andoza: Vikipediya yordam sahifalari - boshqa mavzular bilan bog'langan katta navbox