Memory Alpha, das Star-Trek-Wiki
Advertisement

Hier poste hier die den Code der Was ist das?-Vorlage in Wikicode und LUA.

Ich habe nichts davon getestet und nehme gern Verbesserungsvorschläge und Fragen entgegen.

Wikicode

Vorlage:Was ist das?:

Es ist {{#ifeq:{{{Farbe}}}|blau|Romulanisches Ale|… es ist {{#ifeq:
 {{{Konsistenz}}}|{{wässrig}}|Budweiser Classic|… es ist {{:ifeq:{{Bar}}
 |Quark's|viel zu teuer…|…{{:if:{{Farbe|}}|{{Farbe}}||}}}}}}}}.

Aufruf:

{{Was ist das?|Farbe=grün|Bar=Zehn Vorne|Konsistenz=Dickfüssig}}

Ergebnis:

 Es ist… es ist… es ist… grün.

Ungefähre Entsprechung in LUA

Inhalt von Modul:Data


-- Zeilen die mit zwei `--` beginnen, werden ignoriert. Man kann also dokumentieren
-- was im folgenden Code passiert. Die Entsprechung in Wikicode und HTML wäre also
-- `<!--` und `-->`

-- Aus einem mir nicht bekannten Grund, spielt sich alles in `p` ab. Jedes
-- Mediawiki Lua modul muss oben ein Objekt namens `p` definieren. 
-- Bitte korrigiert mich.

local p = {}

function p.wasIstDas(frame)
  -- Hier definiere ich eine neue variable. Ich nenne sie `output` was ein
  -- üblicher name für einen Rückgabewert einer Funktion ist.
  local output = 'Es ist '

  -- variablen, die an Modul:Data übergeben wurden, befinden sich in der 
  -- `frame.args` variable.
  -- der Einfachheit halber kopiere ich mir den Inhalt in eine neuere 
  -- Variable.
  local farbe = frame.args['Farbe']
  local bar = frame.args['Bar']
  local konsistenz = frame.args['Konsistenz']

  -- Ein doppeltes Gleichzeichen ist der Operator für einen vergleich.
  -- Hier wird also die variable `farbe` mit dem text 'blau' verglichen.
  -- Ist der inhalt von `farbe` blau. So wird der code zwischen dem `if` und 
  -- dem nächsten `end` ausgeführt. Wenn nicht, wird er einfach ignoriert.
  if farbe == 'blau' then
    -- der operator ` .. ` verbindet zwei Zeichenketten miteinander. In diesem 
    -- Fall den inhalt der variable ``output`` ('Es ist ') und 'Romulanisches Ale'
    return output .. 'Romulanisches Ale'
  end

  -- Hier überschreibe ich `output` mit dem vormaligen Inhalt von `output` 
  -- erweitert um die Zeichenkette '… es ist '
  output = output .. '… es ist '

  if konsistenz == 'wässrig' then
    -- Der befehlt `return` gibt die darauf folgende Variable an den
    -- funktionsaufruf zurück. Kommt es innerhalb einer Funktion zu einem 
    -- `return`, so wird der rest der funktion ignoriert.
    return output .. 'Budweiser Classic'
  end

  output = output .. '… es ist '

  if bar == "Quark's" then
    return output .. 'viel zu teuer…'
  end

  output = output .. '… es ist '

  -- Der operator ~= ist die negation von ==. Wärend == vergleicht, ob zwei 
  -- Werte identisch sind. So vergleicht ~= ob sie _nicht_ identisch sind.
  -- Eine leere oder nicht definierte variable enthält automatisch den wert 
  -- `nil`. 
  -- Hier wird also gefragt ob eine variable nicht leer ist.
  if farbe ~= nil then
    -- Und hier verbinden wir einfach den Inhalt von `ouput` mit dem inhalt 
    -- von `farbe`
    return output .. farbe
  end

  -- Wenn keine der Bedungungen oben zutraf, geben wir einfach `output` zurück
  return output
end

-- Aus einem mir nicht bekannten Grund, spielt sich alles in `p` ab. Jedes
-- Mediawiki Lua modul muss am ende das Objekt `p` zurückgeben. 
-- Bitte korrigiert mich.

return p

Aufruf:

 {{#invoke:Data|wasIstDas|Farbe=grün|Bar=Zehn Vorne|Konsistenz=Dickfüssig}}

Ergebnis:

 Es ist… es ist… es ist… grün.

Weitere Infos

Das ist natürlich nur ein simples Modul. Eine ausführliche Übersicht aller verfügbaren Funktionen findet ihr im Lua/Scribunto Benutzerhandbuch.

Debugging

Sollte euch ein Fehler unterlaufen, so gibt ein Modul Scriptfehler zurück. Man kann da drauf klicken und bekommt eine mehr oder minder Ausführliche Erklärung was schief gelaufen ist:

800?cb=20160417110847

In diesem Fall hat jemand versuch auf Zeile 31 eine Zeichenkette (String) mit einer Nummer zu vergleichen.

Am Fuß des Editors gibt es noch die so genannte Konsole. Hier kann man während des Schreibens den Aufruf der Vorlage (mehr oder weniger zuverlässig) testen:

800?cb=20160417112737

In unserem fall können wir die WasIstDas Funktion so aufrufen:

 =p.wasIstDas{['args']={ ['Farbe'] = 'Grün', ['Bar'] = 'Zehn Vorne' }}

und Enter drücken. Im Anschuss zeigt die Konsole, was dieser Funktionsaufruf zurückgeben würde.

Advertisement