Funktionen sind Blöcke von Code, die Sie mehrere Male auf Befehl ausführen können. Sie können sie auch an Ereignisse oder als 0> Rückrufe0> anordnen.
Grundlegende Funktionen
Eine Funktions定义 beinhaltet:
- Das Zielfeld der Funktion (global oder local).
- Das function-Schlüsselwort.
- Der Name der Funktion in camelCase .
- Die Argumente der Funktion in Klammern ( () ).
- Der Block des Codes oder "Körper" der Funktion.
- Das end Schlüsselwort.
Der Körper der Funktion wird ausgeführt, wenn Sie die Funktion aufrufen. Um eine Funktion aufzurufen, geben Sie den Namen der Funktion und die Elternzeit (oder die Zeit, in der Sie die Funktion aufrufen) ein. Sie können eine Variable definieren, um den Rückgabewert anzunehmen, oder verwenden Sie den Rückgabewert anstelle einer Variable.
-- Diese Funktion hat keine Argumente und gibt null zurück
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Eine Funktion aufrufen, ohne einen zurückgebenzu geben
addOneAndTwo() -- 3
Parameter
Parameter sind Variablen, die Sie der Funktion zur Verfügung stellen und nur in dem Funktionsbereich verwendet werden. Funktionen haben keine Standardparameter. Wenn Sie eine Funktion mit mehr Parametern als erwartet aufrufen, ignoriert Luau die zusätzlichen Parameter. Wenn Sie eine Funktion mit weniger Parametern als erwartet aufrufen, übergibt Luau die nil für alle fehlenden Parameter.
-- Diese Funktion hat zwei Argumente: num1 und num2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- attempt to perform arithmetic (add) on number and nil
Zurück
Im Körper der Funktion gibt das return-Schlüssel-wort ein Ergebnis aus einer Berechnung zurück. Sie können mehrere Werte aus einer Funktion zurückgeben. return endet die Funktionsausführung, und Luau erwartet, dass das end-Schlüsselwort die 1> return1>
-- Diese Funktion gibt einen Rückgabewert zurück
local function addNumbers(num1, num2)
local result = num1 + num2
return result
end
print(addNumbers(1, 2)) -- 3
local seven = addNumbers(3, 4)
print(seven) -- 7
-- Diese Funktion gibt mehrere Werte zurück: Summe und Unterschied
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Auf eine Funktion aufrufen und mehrere Rückgabewerte erwarten
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
Methoden
Methoden sind Funktionen, die Mitglieder eines Objekts sind, wie z. B. eine Klasse oder eine Tabelle. Sie erwarten das Objekt selbst ( self ) als ersten Argument. Wenn Sie einen Methoden aufrufen, verwenden Sie die Kommase ( 2> .2> ) anstelle der Punktzahl ( 5> 5> ) um das Objekt automat
Alle Objekte in Roblox stammen von Instance und haben häufig verwendete Methoden, einschließlich Instance:Destroy() , Instance:Clone() und 1> Class.Instance:FindFirstChild()1>.
-- Zerstören eines Teils mit Punktzahl (Funktion)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- ArbeitsbereichfirstPart.Destroy(firstPart)print(firstPart.Parent) -- nichts-- Ein Teil mit der Kolon-Notation zerstören (Methode)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- ArbeitsbereichsecondPart:Destroy()print(secondPart.Parent) -- nil
Methoden definieren
Um eine Methode in einer Tabelle zu erstellen, verwenden Sie den Namen der Methode als Schlüssel und die Methodefunktion als Wert. In der Definition der Methode, der self -Parameter, bezieht sich der self -Parameter auf die Eltern-Tabelle der Methode. Wenn Sie eine Methode mit dem Kollegensymbol aufrufen, übergeben Sie die Tabelle selbst als ersten Argument. Sie können Parameter für eine Methode definieren, aber Sie
Im folgenden Beispiel hat die testButton Tabelle eine Methode als Wert des changeEnabled-Schlüssels. Sie können überprüfen, dass self auf die Methode 2>self.enabled2> zurückgreift, indem Sie den Wert von 5>self.enabled5> druckt.
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- wahr
-- Rufen Sie die Methode auf
testButton:changeEnabled(false) -- false
Rückrufe
Rückrufe sind Funktionen, die in der Reaktion auf eine andere Funktion oder Prozess ausgeführt werden.
Einfache Rückrufe
Funktionen können in andere Funktionen übergeben werden, z. B. eine anonyme Funktion kann verwendet werden, um einen Rückruf zu implementieren, der dann verwendet wird, um eine Liste von table.sort() von Players zu sortieren.
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Verwenden Sie einen anonymen Rückruf, um Spieler nach Namen zu sortieren
return a.Name < b.Name
end)
In der Roblox-API beziehen sich Rückrufe auf ein Mitglied der write-only-Funktion, Rückrufe werden ausgegeben, bis sie zurückgeben. Breitamente verwendete Rückrufe umfassen:
- MarketplaceService.ProcessReceipt, der sich um Käufe von Entwicklerprodukten kümmert.
- BindableFunction.OnInvoke, die die Funktion aufruft, wenn ein Skript BindableFunction:Invoke(...) aufruft.
- RemoteFunction.OnClientInvoke , die die Funktion aufruft, wenn der Server RemoteFunction:FireClient(player, ...) oder RemoteFunction:FireAllClients(...) ruft.
- RemoteFunction.OnServerInvoke, die die Funktion aufruft, wenn ein Client RemoteFunction:InvokeServer(...) aufruft.
Um einen Callbackzu verwalten, weisen Sie einer Funktion einen Callbackzu. Zum Beispiel ist BindableFunction.OnInvoke ein Rückruf von BindableFunction . Sie können einen benannten oder
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Funktionstechniken
Ereignishändler
Du kannst eine Funktion, die als Ereignishändler bekannt ist, zuweisen, um sie auszuführen, wenn ein Ereignis abgefeuert wird. Zum Beispiel kannst du eine Funktion namens onPlayerAdded() auf das Players.PlayerAdded -Ereignis drucken, um den Namen jedes Spielers anzuzeigen, der beitritt. Weitere Informationen findest du unter 1>Ereignisse1>
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Anonyme Funktionen
Du kannst Funktionen ohne Namen erstellen, die als anonyme Funktionen bekannt sind, um sie als Callbacks und Ereignishändler zu verwenden. Wie namensbasierte Funktionen müssen anonyme Funktionen mit dem 1> function1> und 4> beenden4>-Schlüssel beginnen und enden, aber du mus
Im folgenden Beispiel sind die Rückrufe für die Funktion task.delay() und den Ereignishändler für das Ereignis Players.PlayerAdded beide anonyme Funktionen.
-- Anonyme Funktion in einer Rückruf-Funktion zu task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329944
end)
-- Anonyme Funktion in einem Ereignishändler
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Funktionen in ModulScripts
Du kannst Funktionen über mehrere Skripte hinweg wiederverwenden, indem du sie in ModuleScripts speicherst. Funktionen sind ein eingeben, so dass du sie in Tabellen mit anderen Daten speichern kannst.
Variadische Funktionen
Eine Variabildfunktion akzeptiert jede Anzahl von Argumenten. Zum Beispiel ist Globals.LuaGlobals.print() eine Variabildfunktion.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- Der Kuchen ist eine Lüge!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Variante funktionen definieren
Um eine Variabildfunktion zu definieren, verwendest du den ... Token als letzten oder einzigen Parallel-Parameter (nicht mit .. , der Konzentration Betreiber zu verwechseln). Du kannst die 2>...2> Werte in einer Tabelle für die einfache Verwendung platzieren.
local function variadic(named, ...)
local arguments = {...} -- paket die zusätzlichen argumente in eine tabelle
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Ergebnis:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Argument-Weitergabe
Du kannst Variadische Funktionen als Wraps um andere Funktionen definieren, um Argumente vom Wrapper zu anderen Funktionen Pass.
local function printAround(functionToPrintAround, ...)
print("Before")
functionToPrintAround(...)
print("After")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ Ergebnis:
Before
x = 1
y + z = 5
After
]]
Eine Variadische Funktion mit Arrays aufrufen
Wenn Sie ein globales Table-Matrix an Werte übergeben möchten, wie z. B. print() ", können Sie die globale Funktion unpack() verwenden, um die Werte der Tabelle anstelle der Tabelle selbst zu übergeben.
local squares = {1, 4, 9, 16, 25}print("The first 5 square numbers are:", unpack(squares))-- The first 5 square numbers are 1 4 9 16 25