WikiDer > Анықтама: Lua күйін келтіру - Википедия
| WP: Луа (әңгіме) | Көмектесіңдер | Істеу | Ресурстар mw: анықтамалық нұсқаулық |
Бұл анықтама беті, Көмек: Lua күйін келтіру, жазу мәселелерін түсіндіреді Луа жазуы және түзету The бастапқы код, қателерді жою немесе өнімділігін жақсарту үшін. Lua «жартылай жинақталған» түсіндірілген тіл болғандықтан, синтаксистің барлық қателіктерін алдын-ала экранға шығармайды және қате жазылған айнымалыларды анықтамайды, олар тек жұмыс уақытында «Сценарий қатесі«хабарлама. Сонымен қатар, басқаша wp: шаблондар алдын-ала қарау арқылы интерактивті түрде іске қосылуы мүмкін, Lua сценарийі шаблонды қолданатын басқа беттің шоуын алдын-ала қарау (немесе алдын ала қарауды іске қосу) арқылы тексерілуі керек. # шақыруLua модулі өңделуде. Жалпы, бір уақытта кішкене өзгертулер енгізіп, шоу-алдын ала қарауды жүргізіп, бірнеше жақсы өзгертулерден кейін сақтап қойыңыз, егер қалпына келтіру нұсқасы болса, егер көптеген қателіктерден кейін қателіктер орын алса. Ескерту: әр нұсқаны модуль нұсқаларына сақтаудан гөрі, жұмыс көшірмесін сақтау оффлайн мәтіндік файлға жасалуы мүмкін.
Синтаксистік қате немесе анықталмаған айнымалы атауы анықталған басқа алдын-ала құрастырылған немесе жартылай жинақталған тілдер жолдың нөмірін немесе кодтық сөйлемді анықтай алады; дегенмен, бұл өңдеу үшін қосымша уақыт қажет болуы мүмкін. Оның орнына, мүмкін лексикалық талдау Lua сценарийіне арналған, Lua бастапқы кодында қате жазылған айнымалыларды немесе логикалық қателерді дұрыс анықтау және дәл анықтау.
Алдын ала қарауды Show-preview көмегімен іске қосыңыз
Lua модульдеріне тікелей өзгерістерді шаблондар / модульдер үшін шаблондар / модульдер үшін алдын-ала қараудың жаңа опциясын қолдану арқылы шаблонды / модульді қолданатын беттің «Алдын ала қарауды көрсету» жолымен тексеруге болады. Әйтпесе, нәтижелерді көру үшін Lua модульдерін интерактивті түрде іске қосу мүмкін емес, бұл тек белгілерге негізделген шаблондарда ерекшелік. Оның орнына, Lua модульдері өңделеді, сақталады және өңделеді, сақталады және жартылай компиляцияның синтаксистік қателіктерін байқауға болатын-болмайтынын анықтайды (шақыру шаблоны бойынша). Сонымен қатар, іске қосуды алдын ала қарау қарапайым синтаксистік қателіктер туралы хабарламаса да, модульді тікелей редакциялауға мүмкіндік береді, содан кейін нәтижелерді көру үшін немесе қоңырау шалушы беттің «Алдын ала қарауды көрсету» параметрін таңдайды немесе егер алдын ала қарау кезінде «Сценарий қатесі» орын алса, көптеген рет, редакторды сақтамас бұрын. Алайда, редакциялаудың сақталуы қарапайым синтаксистік қателіктерді тексеру үшін кейбір жартылай компиляциялық хабарламаларды көрудің артықшылығы болып табылады, мысалы, «содан кейін» көшірмесі, олар шоуды алдын-ала қарау кезінде хабарланбайды.
Сценарий қатесінің себептері
Lua модулінің хабарламаны тудыратын себептері көп болуы мүмкін «Сценарий қатесі«басқа бетте іске қосқан кезде. Қате мәтінін басқанда Луа жасаған нақты қате туралы хабарламаны қамтитын қалқымалы терезе пайда болады, оны іздеу жүйесінде хабарламаның нені білдіретінін және жалпы емдеу құралдарының толық сипаттамасын табуға болады. стек трек, қатенің нақты себеп болған бөлігін анықтауға көмектеседі.
Алайда, кейбір қателер басқаларына қарағанда жиі кездеседі:
- Бос жолдың қате тізбегі:
my_str = my_str .. «xx»- 'my_str' деп аталатын жол жолды біріктіру операциясының ішінде нөл болмауы керек. - «+» Емес «+» операторының қатыстыруы жарамсыз:
my_str = my_str + «z»- біріктіру операторы екі нүктелі «..» болып табылады және «+» плюс белгісін қолдануға тырысу алдын-ала өңдеу-жинақтау кезінде өтіп кетуі мүмкін, бірақ Lua сценарийінің осы бөлігі орындалған кезде «Сценарий қатесін» басуы мүмкін. - Жарамсыз функция атауы:
len = string.long (my_str)- Жол ұзындығының операторы '#' хэш белгісі (келесідей:# менің_стр) немесе функцияны қолданыңыз 'string.len (my_str)'бірақ белгісіз функцияны қолдануға тырысу'string.long (my_str)'өңдеу-сақтаудың алдын-ала компиляциясы кезінде сәтті өтеді, бірақ Lua сценарийінің бөлігі орындалған кезде «Сценарий қатесі» пайда болады.
- Бос жолдың қате тізбегі:
Көптеген басқа себептері бар »Сценарий қатесі«бірақ әрқашан орнатылмаған, инициализацияланбаған айнымалы болуы мүмкін әлеуетті іздеңіз, ол сол кезде бағдарламаны тоқтатады.
Артқа тұруға болатын тұрақты нұсқаларды сақтау
Бірден көп қателіктерге тап болмас үшін, жалпы стратегия - бір уақытта «бір кішігірім өзгеріс» жасау, шоу-алдын ала қарауды орындау, содан кейін бірнеше жақсы өзгерістен кейін сол тексерілген нұсқаны сақтау үшін тұрақты нұсқаны қалпына келтіру, көптеген кейінгі өзгерістерден кейін қорқынышты қателіктер пайда болған жағдайда. Ескерту: әрбір жұмыс көшірмесін сақтауды оффлайн мәтіндік файлдар жиынтығында жасауға болады, мүмкін олардың әрқайсысы белгілі бір нұсқасының атымен (және ішкі түсініктемелерімен), әр нұсқаны Википедия модулінің нұсқаларына сақтаудан гөрі.
Түзету әдісі
Қарапайым шолу
Айнымалының мәнін модульдің бір нүктесінде көру үшін:
Кодты өзгерту
The қате () функциясын (модульдегі кез-келген нүкте үшін) пайдалануға болады. Айнымалыны білу үшін (осында аталған) var) мәні, модульде тек жолды қосу қате (var) талап етіледі.
Бірақ егер бұл айнымалы кесте болса (қойынды, келесі түсініктемеде) mw.dumpObject (қойынды) қолданылады немесе егер онда кестелер болмаса, table.concat (қойынды, ',') параметр ретінде де қолданыла алады қате () функциясы.
Кодты өзгертпей
Функциялардан алынған айнымалылар мен мәндерді алу үшін (екі жағдайда да жергілікті емес) «Түзету консолі» қолданылуы мүмкін. «Түзету консолі» төменде модуль бетінде пайда болады (ол редакциялау режимінде болған кезде). Содан кейін mw.log, mw.logObject, және = пайдалануға болады. Оның пайдалылығын келесі мысалда көрейік:
жергілікті б = {}б.Сәлеметсіз бе = 'Сәлеметсіз бе'функциясы б.кальц(сан) қайту санСоңыфункциясы б.қосынды_көп(сан) қайту сан + сан, сан * санСоңыфункциясы б.mtable(сан) қайту {сан, сан+1}Соңықайту б«Түзету консоліне» сұраныстар:
| Сұраныс | Мән қайтарылды |
|---|---|
| mw.log (сәлем) | «Сәлеметсіз бе» |
| mw.log (pccalc (10/2)) | 5 |
| mw.log (p.sum_mult (3)) | 6 9 |
| mw.log (кесте (4)) | кесте |
| mw.logObject (кесте (4)) | кесте №1 {
} |
| = p.sum_mult (10) | 20 100 |
| = Сәлем .. ', Әлем!' | Сәлем Әлем! |
. Түзету консолі сұраныстарды сақтамайды, содан кейін оларды әрбір модуль модификациясында көшіруге немесе қайта жазуға тура келеді.
Ағынды және бірнеше нүктелердегі айнымалы мәндерді шолу
Функциялары Модуль: SimpleDebug жоғарыда аталған жағдайлар үшін немесе неғұрлым күрделі жағдайлар үшін қолданыла алады:
- Айнымалылар немесе функцияның қайтарылған мәні (немесе мәндері) жергілікті болған кезде.
- Бағдарламаның ағыны бір нүктеден өтіп жатқанын көру үшін (сіз оны белгілейсіз).
- Ілгектен қайтарылған мәндер санын шектеу немесе мәндерді тіркеуге мүмкіндік беретін шарттар қою.
Ескі модульдерді жөндеу
Кейбір жағдайларда Lua модулі ескі күш болуы мүмкін, мүмкін оны басқа редакторлар өзгерте алады, бірнеше белгісіз проблемалар туындауы мүмкін. Lua модулі көптеген логикалық қателіктерден, тіпті егер модуль дұрыс тексерілмеген болса, қате жазылған айнымалылардан тұрады, егер барлық функциялар үшін бастапқыда жасалған болса. Хабарлама «Сценарий қатесі«тек тестілеу деректері Lua кодының жарамсыз бөлімін іске қосқанда пайда болады, сондықтан тексерілмеген модульде көптеген жасырын қателер болуы мүмкін, тек кеңірек тестілеу деректері бастапқы кодтың көптеген аймақтарын белсендіргенде немесе ішкі функцияларды көп қолданғанда ғана анықталады.
Жалпы және күрделі мәселе - ескі модульді жаңа мүмкіндіктер үшін кеңейтуге тырысу, бірақ кеңейтілген функционалдылықты қосқанда кейбір шешілмеген қателіктердің қалай басталатынын білмеу. Қандай қателіктер көбінесе жаңадан қосылған луа сценарийінде емес, ескі бөлімдерде үнсіз күтуге болатындығын ескеріңіз (сюрприз) жаңа код луа сценарийінің басқа бөліктерін іске қосқанда. Жасырын қате анықталмаған (немесе қате жазылған) айнымалы атауы сияқты қарапайым болуы мүмкін, ол әдепкі мәнмен өңделген, бірақ жаңадан қосылған функциялармен қолданылған кезде, толықтай жұмбақ нәтижелер шығарады, жаңа кодта қателер болған сияқты, шын мәнінде, ескі қате жазылған айнымалылар, басқа салаларда, жаңа функциялардың жұмысын толығымен қоқысқа тастады.
Ескі қателермен күресудің тактикасы - кодтық аймақтарды белсендіру үшін арнайы тестілік деректерді іске қосуды жоспарлау немесе жаңа Lua сценарийін қосуға болатын дисплей нәтижесін көрсету, ақыл-парасатты тексеру тым көп жаңа, егжей-тегжейлі логика қоспас бұрын, зардап шеккен аймақтар мықты жұмыс істейтіндігі. Көп жағдайда назар аударыңыз: «түзету - тестілеудің ең жылдам түрі » егер ескі бастапқы кодтың егжей-тегжейін қарастыруға шыдамдылық немесе ақыл-ой жады күші болса. Алайда, тағы бір тактика - бұл барлық байланысты деректердің мәндерін экранға тастайтын дисплей кодын іске қосу үшін белгілі бір тест-деректер мәндерін резервтеу немесе логиканың әр түрлі функционалдық бөлімдерге күтілгендей ағуын қамтамасыз ету үшін шақыру тізімі. Көптеген жағдайларда адамның жады 5-9 айнымалылардан тыс бөлшектермен жұмыс істей алмайды, сондықтан Lua модуліне дұрыстап басу операторларын жазу үшін қосымша уақыт қажет болғанымен, дисплей оңалтады. Баяу жүруге абай болыңыз, өйткені жаңа луа сценарийінің көп мөлшері қосылғаннан кейін, проблемалар ескі луа сценарийінде бұрыннан пайда болған қателіктерден емес, «барлық жаңа заттардан» туындады ма, жоқ па, бұл таңқаларлық болжам ойынына айналуы мүмкін.
Сценарий әзірлеу үшін жеке құм жәшігін пайдалану
Ағылшын Википедиясында Үлгі құм жәшігі кеңейтім орнатылды. Lua модулдерін жеке кеңістікке шығармас бұрын жеке (яғни, пайдаланушы кеңістігінде) беттерде әзірлеуге және өзгертуге мүмкіндік беретін «шаблонның құм жәшігі» мен «Скрибунто» кеңейтімдері арасында синергия бар.
Луа модульдерін жасау үшін «Үлгі құм жәшігін» пайдалану
Практикалық мысал алайық. осы мысал үшін сіздің қолданушы атыңыз «Lua Developer» деп есептеңіз. Қателерді түзетуді немесе жақсартуды тексергіңіз келеді дейік Жол модуль. Мұны тікелей жасай алмауыңыздың екі себебі бар: бұл модульде жүздеген шаблондар қолданатын, миллиондаған мақалалардан тұратын функциялар бар. Кез келген қате Уикипедияға үлкен кедергі келтіреді. Екінші себеп - прозалық: бұл модуль өте орталық болғандықтан, ол да қорғалған және біздің «Lua Developer» қолданушысында бұл модульді өзгертуге қажетті рұқсаттар жоқ.
Сонымен, «құм жәшігінің» алғашқы қадамы - көшіру Модуль: жол жеке параққа Қолданушы: Lua Developer / құм жәшігі / модуль: жол. Енді біздің әзірлеуші модульді өзінің қалауынша өңдей алады. Кез келген сәтте ол аша алады Арнайы: TemplateSandbox, әдепкі «құм жәшігінің префиксін» қолдана отырып, оның жағдайында «Пайдаланушы: Lua Developer / құм жәшігі» болады. Бұл дегеніміз, кез келген бетті құмсалғыш бетінен қарау, талдаушы Үлгіге тап болған сайын Т немесе модуль М, алдымен «User: Lua Developer / sandbox / Template: T» немесе «User: Lua Developer / sandbox / Module: M» деп аталатын парақтың бар-жоғын білуге болады, егер болса, талдаушы оларды талдануға қолданады. «нақты» модуль мен шаблон аттарының кеңістігіндегі орнына. «Құм жәшігінің префиксі» астында жоқ кез-келген үлгіні немесе модульді талдаушы тиісті аттар кеңістігінен шығарып алады.
Үлгі құм жәшігінен әзірлеуші кез-келген бетті көре алады, сонымен бірге викитекстің бастапқы мәтінін енгізе алады және «Құм жәшігінің префиксі» астында жасанды шаблондар мен модульдерді қолданып, талдаушыдан оны талдауды сұрай алады.
Кішкентай ескерту: дұрыс емес іс
Википедияда парақ атауына қатысты аздаған бұрмаланулар бар: ол бет атауының бірінші таңбасын енгізу тәсіліне қарамастан үлкен әріптерге айналдырады. Орнын толтыру үшін ол шаблонның бірінші әрпін (ауыстырылған кезде) және модульді (шақырылған кезде) бас әріпке айналдырады. дегенмен, бұл қолданушыда сақталатын модульдерге қолданылмайды: арнайы кеңістік арқылы қаралатын аттар кеңістігі Үлгі құм жәшігі, өйткені құм жәшігінде «бірінші әріп» бірінші әріп емес. Міне нақты мысал: нақты модульдер үшін, айталық Модуль: жол, медиа-вики бағдарламалық жасақтамасы «Міне, мен» қайтару үшін {{#invoke: String | replace | Hara I am | a | e}} пайдалануға мүмкіндік береді (көріңіз). Ол сізге бірдей нәтиже алу үшін {{#invoke: string | replace | Hara I am | a | e}} пайдалануға мүмкіндік береді:
| викитекст | нәтиже |
|---|---|
| {{#invoke: String | ауыстыру | Хара Мен | а | е}} | Міне, мен |
| {{#invoke: string | ауыстыру | Хара Мен | а | е}} | Міне, мен |
Алайда, егер біздің әзірлеуші аталған парақ жасаса Қолданушы: Lua Developer / құм жәшігі / модуль: жол, ол бұл модульді кез-келген жолмен шақыра алмайтын еді, өйткені талдаушы құм жәшігінің префиксінің астында «Модуль: жол» емес «Модуль: Жол» деп аталатын парақ іздейді, Википедия атауды «Модуль:» түріне айналдырмайды. String «(өйткені ол тек бет атауындағы 1-ші таңбаны түрлендіреді), және оны таба алмайды, сондықтан ол модульді негізгі аттар кеңістігінен алады (егер мұндай модуль болса) немесе модуль жоқ деп шағымданады.
Үлкен / кіші регуляр Модуль: аттар кеңістігінде орналасқан қалыпты қолданудағы барлық модульдер үшін дұрыс өңделген.
Кеңейтілген дисплей кодын жоспарлау
Стратегияның тағы бір мәселесі ретінде дисплей бөлімдерін қосу Lua кодын баяулатпайды, өйткені түзету негізінде шаблонды орындау жылдамдығы мүмкін, өйткені Lua жүздеген if-шарттарды жылдамдықпен өңдей алады. Әрбір Lua айнымалысы үшін қосымша if-операторының қосылуының өзі жылдамдықты аздап қозғайды, егер шаблонның ішіне ұқсас if-өрнектерін қосатын болса, үлгіні 50% баяулатады. Lua модуліне дисплейдегі дисплейдің көптеген бөлімдерін қосуға қымсынбаңыз немесе бірнеше бөлім қосыңыз параметрді тексеру типтік жаман деректерді анықтау үшін айнымалылардың мәндерін тексеру үшін қосымша if-операторлары ретінде тесттер.
Уақытша үзілістер
Бастапқыда Lua бағдарламалық жасақтамасы парақты пішімдеу кезінде барлық Lua кодтарының бірлесіп жұмыс істеуі үшін 10 секундтық күту уақытымен конфигурацияланған. Салыстыру үшін, түзетулерге негізделген шаблондарда 60 секундтық күту уақыты бар (6 есе жоғары уақыт шегі), ал серверлер баяу жұмыс жасағанда, түзетулерге негізделген шаблондар 59 секундқа дейін керемет форматталуы мүмкін, бірақ шаблондардың Lua бөліктері болады 10 секундтық шектеуде тоқтады. Қате туралы хабар болуы мүмкін:
- Lua 'сценарий қатесі': «Сценарийлерді іске асыруға бөлінген уақыт аяқталды.»
Форматталған шаблондарға қарағанда, пішімделген бетте парақ кэшінің көшірмесінде сақталатын мәтін ретінде Lua модулі үшін әрбір «сценарий қатесі» болады. Уақыттың аяқталу қаупі 3х-4х баяу серверлік кідірістің сирек кезеңдерінде орын алады, мұнда 3 секундтық Lua әрекеті бос серверлермен 12 секундқа дейін баяулауы мүмкін және осылайша «сценарий қателігін» сақтау үшін өңдеуді өшіреді. мыңдаған оқырмандар көруі үшін форматталған парақ.
Жалпы күш тұрақсыз немесе сенімсіз болып көрінеді, өйткені Луа кенеттен «қатты шаршап», шағымдана бастайды, оның орнына «Сценарий қатесін» сақтау керек, егер оның орнына форматталған мәтін күткен болар еді. Күтуге қатысты мәселе сирек кездеседі, егер пішімделген мақалада парақтың ішіндегі «Сценарий қатесі» мәтіні бар болса, кішкене өзгеріс енгізу үшін парақты аздап өзгертіп, парақты Lua жүгірісімен ауыстыруға мәжбүр етіңіз.
Қолдау
Егер сіз әлі де тұрып қалсаңыз және қалай жүретіндігіңізді білмесеңіз, ескерту қалдырыңыз Уикипедия: Lua сұраныстары түзету көмегін сұрау.
Сондай-ақ қараңыз
- wp: Lua Уикипедияда - пайдалану туралы эссе Луа жазуы Википедияда
- Үлгі: Уикипедия анықтамалық беттері - басқа тақырыптарға сілтеме жасайтын үлкен navbox