Menu
Coddy logo textTech

Geschützte Aufrufe mit pcall()

Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy — Lektion 33 von 54.

Während error() dein Programm stoppt, wenn etwas schiefgeht, möchtest du Fehler manchmal behandeln, ohne dass das Programm abstürzt. Luas Funktion pcall() ermöglicht es dir, Code, der fehlschlagen könnte, sicher auszuführen.

Der Name pcall() steht für "protected call" (geschützter Aufruf). Er hüllt einen Funktionsaufruf in eine Schutzschicht ein, die alle Fehler abfängt. Anstatt dass Ihr Programm abstürzt, gibt pcall() Informationen darüber zurück, was passiert ist.

Hier ist die grundlegende Syntax:

local status, result = pcall(functionName, arg1, arg2)

Die Funktion pcall() gibt zwei Werte zurück. Der erste ist ein boolescher Status: true, wenn die Funktion erfolgreich war, oder false, wenn ein Fehler aufgetreten ist. Der zweite Wert hängt vom Status ab – bei Erfolg ist es der Rückgabewert der Funktion; wenn ein Fehler aufgetreten ist, ist es die Fehlermeldung.

Hier ist ein praktisches Beispiel:

function divide(a, b)
    if b == 0 then
        error("Cannot divide by zero")
    end
    return a / b
end

local success, result = pcall(divide, 10, 0)

if success then
    print("Result: " .. result)
else
    print("Error caught: " .. result)
end

In diesem Beispiel löst die Division durch zero einen error aus, aber anstatt abzustürzen, fängt pcall() ihn ab. Das Programm läuft weiter und kann den error elegant behandeln, indem es den status-Wert überprüft.

challenge icon

Aufgabe

Einfach

Schreibe eine Funktion safeCalculate, die operation, a und b entgegennimmt und das Ergebnis der Berechnung oder eine Fehlermeldung zurückgibt.

Die Funktion sollte pcall() verwenden, um die angeforderte mathematische Operation sicher auszuführen. Erstelle eine innere Funktion, die die Berechnung basierend auf dem Operations-String durchführt, und umhülle sie mit pcall(), um etwaige Fehler abzufangen.

Logik:

  • Erstelle eine innere Funktion, die den Operationstyp prüft und die Berechnung ausführt
  • Für "add", gib a + b zurück
  • Für "subtract", gib a - b zurück
  • Für "multiply", gib a * b zurück
  • Für "divide", prüfe, ob b gleich 0 ist, und rufe error("Division by zero") auf, falls dies zutrifft, andernfalls gib a / b zurück
  • Für jede andere Operation rufe error("Invalid operation") auf
  • Verwende pcall(), um die innere Funktion auszuführen
  • Bei Erfolg gib "Result: " gefolgt vom Ergebnis zurück
  • Tritt ein Fehler auf, gib "Error: " gefolgt von der Fehlermeldung zurück

Parameter:

  • operation (string): Die auszuführende Operation ("add", "subtract", "multiply" oder "divide")
  • a (number): Der erste Operand
  • b (number): Der zweite Operand

Rückgabe: Ein String, der entweder "Result: " gefolgt vom Berechnungsergebnis oder "Error: " gefolgt von der Fehlermeldung enthält (string)

Probier es selbst

function safeCalculate(operation, a, b)
    -- Schreibe hier den Code
    -- Note: Der Test-Runner erwartet, dass die Fehlermeldung die Zeilennummer enthält.
    -- Stelle sicher, dass dein error-Aufruf in der erwarteten Zeile steht, oder verwende eine einfache Fehlermeldung, wenn der Test-Runner es erlaubt.
end
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmablauf