Helpo:Lua/Modulo por certa ŝablono

El Vikipedio, la libera enciklopedio
Logo de la Lua-lingvo Lua

VP:LUA

Kategorioj
Ŝablonoj
  • {{LuaModuleDoc}} por la dokumentado de modulo, por aranĝi la keston kun ligiloj
  • {{Modula statuso}} por la dokumentadoj de modulo, por indiki la evoluan statuson de modulo
  • {{Kun Lua-modulo}} por la dokumentado de ŝablono, kiu uzas Lua-modulon aŭ eĉ entute baziĝas sur modulo
  • {{Uzanto Projekto/Lua}} por uzantopaĝoj
Vidu ankaŭ
Komentoj
  1. (per {{Kun Lua-modulo}})
  2. (per {{LuaModuleDoc}})
vdr

Ĉi tiu helpopaĝo donas por Lua-programistoj startan punkton, kiel eblas skribi modulon, kiu subtenu ekzakte unu ŝablonon.

La malo estus biblioteka modulo, kiu povas esti alvokata de iom ajn multaj diversaj ŝablonoj.

Baza principo[redakti | redakti fonton]

  • La modulo ricevas la nomon
    Modulo:Ŝablono:Ŝablona titolo
    • Per tio estas facile ekkompreni la grupigon.
  • La laboro de la ŝablono estas eksklude farata per la modulo.
    • La ŝablono enhavas kutime nur ununura linion:
      {{#invoke:Ŝablono:Ŝablona titolo|f}}<noinclude>{{Dok}}</noinclude>
  • La funkcio f (aŭ laŭ prefero alie nomita) estas la ununura por ŝablonoj disponebla interfaco.
  • Parametroj de la ŝablona enplektado ne devas esti transdonataj; ili povas esti determinataj pli bone kaj pli komplete ene de la modulo.
  • Ene de Vikia projekto ne necesas aliaj parametroj; apartaj kazoj estus Pluraj ŝablonojInternaciigo.
--[=[ 2013-05-19
Subteno por {{Ŝablona titolo}}
f() test()
]=]


--
--


local function x( u )
    local r
    --
    return  r
end -- x()


local function main( a )
    local r
    --
    r = x( u )
    --
    return  r or ""
end -- main()



-- Export
local p = {}

function p.test( a )
    local lucky, r = pcall( main, a )
    return r
end

function p.f( frame )
    local lucky, r = pcall( main, frame:getParent().args )
    return r
end

return p

Ŝablona interfaco[redakti | redakti fonton]

La funkcio f transprenas per getParent() la parametrojn de la ŝablona enplekto.

Ĝi alvokas la ĉefan funkcion en protekta ekzekutado.

Redona valoro estas la de main() redonita signoĉeno aŭ la de pcall() asignita signoĉeno de la erarmesaĝo.

Testa interfaco[redakti | redakti fonton]

  • Por aŭtomatigitaj testoj povas esti antaŭdifintaj de koncerna Lua-modulo pli granda serio de parametraj aroj kaj esti komparataj kun la atendataj rezultoj.
  • La parametraj aroj estas aranĝataj en sama maniero, kiel ili estus uzataj ĉe la ŝablona enplektado.
  • La ĉefa funkcio estas alvokata ekzakte analoge.

Ĉefa funkcio[redakti | redakti fonton]

  • La funkcio main() (aŭ laŭ prefero alie nomita) estas la vera labora funkcio.
  • Ĝi ricevas ĉiujn parametrajn asignojn kiel a, egale ĉu tiuj devenas al #invoke aŭ de la simulado.
  • La redona valoro estas la por ŝablonoj taŭga signoĉeno; kaj tio identa por la ŝablona enplekto kaj la simulado, por ke la rezultoj estu kompareblaj.
  • frame ne estas transdonata. Se la objekto foje estas bezonata, ĝi povas esti determinata per mw.getCurrentFrame(). Ĝi estus tiu de la ŝablona enplekto aŭ eble tiu nepre ie ekzistanta #invoke de la simulado.
  • La loka funkcio main() devas esti fiksita kiel lasta de ĉiuj lokaj funkcioj.

Protekta ekzekutado[redakti | redakti fonton]

La alvoko de la ĉefa funkcio estas ĉiam protektata en pcall().

  • Se okazas nun iu eraro dum ekzekutado, aŭ eraro estas kaŭzata per la propra modulo per assert()error(), tiam r estas la erarmesaĝo.
  • Per tio estas evitata la notore nespecifa „Skripteraro“.

Pluraj ŝablonoj[redakti | redakti fonton]

Se ekzistas sufiĉe limigita grupo de ŝablonoj (ekzemple Ŝablono:Lin*), ĉe kiuj ne valoras la penon por unuopaj moduloj, ili povas esti lokataj en unu komuna modulo.

Jen ekzemplo de Ŝablono:Lin longo[noto 1]:

{{#invoke:S|f|f=len}}

kun ununura Modulo:String por ĉiuj.

La funkcio f devas esti tiam modifata kiel sekvas:[noto 1]

function p.f( frame )
    local a = frame:getParent().args
    a.f = frame.args.f
    local lucky, r = pcall( main, a )
    return r
end

Dum ke ĉiuj aliaj parametroj devenas de la ĉirkaŭanta ŝablono, f estas prenata el la argumentoj de #invoke.

La funkcio test devas konvene antaŭdifini al si la ŝablonan nomon en sia simulado.

  1. 1,0 1,1 Bonvolu atenti, ke la sekvaj informoj estas prenitaj el la germana helpopaĝo kaj ankoraŭ ne koncernas la ĉitieajn modulojn nek ŝablonoj. Sed eble okazos iam ŝanĝo laŭ la germanaj versioj.