Le funzioni sono blocchi di codice che puoi eseguire più volte in modo da poter eseguire più volte al comando. Puoi anche connetterli a eventi o assegnarli come 0> richiami0> .
Funzioni di base
Una definizione di funzione include:
- Il scopo della funzione ( globale o local).
- La parola chiave function .
- Il nome della funzione in camelCase .
- I parametri della funzione in parentesi ( () ).
- Il blocco di codice, o "corpo", della funzione.
- La parola chiave end .
Il corpo della funzione viene eseguito quando chiami la funzione. Per chiamare una funzione, digita il suo nome seguito da parentesi. Puoi definire una variabile per accettare il valore restituito o utilizzare il valore restituito invece di una variabile.
-- Questa funzione non ha parametri e restituisce null
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Chiamare una funzione senza un Riportare
addOneAndTwo() -- 3
Parametri
I parametri sono variabili che rendi disponibili alla funzione e vengono utilizzati solo nell'ambito della funzione scope. Le funzioni non hanno parametri per impostazione predefinita. Se chiami una funzione con più parametri di quanto ci si aspetterebbe, Luau ignora i parametri extra. Se chiami una funzione con meno parametri di quanto ci si aspetterebbe, Luau passa nil per tutti i parametri mancanti.
-- Questa funzione ha due parametri: num1 e 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
Ritorna
Nel corpo della funzione, il return keyword restituisce un risultato da un calcolo. Puoi restituire più valori da una funzione. return finisce l'esecuzione della funzione, e Luau si aspetta che il end keyword segua le dichiarazioni 1> Riportare1>, quindi scrivendo il
-- Questa funzione restituisce un valore di ritorno
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
-- Questa funzione restituisce più valori: somma e differenza
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Chiamare una funzione e aspettarsi più valori di ritorno
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
Metodi
I metodi sono funzioni che sono membri di un oggetto, come una classe o una tabella . Si aspetta che l'oggetto stesso ( self ) come primo argomento. Quando chiami un metodo, usa la virgola notazione ( 2> .2> ) invece della notazione punto ( 5> 5> ) per passare <
Tutti gli oggetti in Roblox scendono da Instance e hanno metodi comunemente utilizzati, tra cui Instance:Destroy() , Instance:Clone() e 1> Class.Instance:FindFirstChild()1> .
-- Distruzione di una parte con notazione dot (funzione)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- Area di lavorofirstPart.Destroy(firstPart)print(firstPart.Parent) -- niente-- Distruzione di una parte con colon notazione (metodo)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- Area di lavorosecondPart:Destroy()print(secondPart.Parent) -- nil
Definire metodi
Per creare un metodo in una tabella, usa il nome del metodo come chiave e la funzione metodo come valore. nella definizione del metodo, il self parametro si riferisce alla tabella padre del metodo. Quando chiami un metodo usando la notazione colon, passi la tabella stessa come primo argomento. Puoi definire i parametri per un metodo, ma devi elencarli dopo il self parametro.
Nell'esempio seguente, la tabella testButton ha un metodo come valore della chiave changeEnabled. Puoi verificare che self si riferisce alla tabella di parentesi della metodo facendo clic sulla value di 1> self.enabled1> .
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- vero
-- Chiama il metodo
testButton:changeEnabled(false) -- false
Chiamate
I callback sono funzioni che vengono eseguiti in risposta a un'altra funzione o processo.
Callback di base
Le funzioni possono essere passate in altre funzioni, per esempio, una funzione anonima può essere utilizzata per implementare un callback che table.sort() e poi usa per ordinare una lista di Players da 1> Class.Players.GetPlayers()1> .
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Usa un callback anonimo per ordinare i giocatori per nome
return a.Name < b.Name
end)
Nell'API Roblox, i callback si riferiscono a un Membridella funzione write-only, i callback producono fino a quando non vengono Riportare. I callback amplamente utilizzati includono:
- MarketplaceService.ProcessReceipt , che gestisce le acquisti dei prodotti del developer.
- BindableFunction.OnInvoke , che chiama la funzione quando uno script chiama BindableFunction:Invoke(...) .
- RemoteFunction.OnClientInvoke , che chiama la funzione quando il server chiama RemoteFunction:FireClient(player, ...) o RemoteFunction:FireAllClients(...) .
- RemoteFunction.OnServerInvoke , che chiama la funzione quando un client chiama RemoteFunction:InvokeServer(...) .
Per impostare un Richiama, assegnare una funzione a esso. Ad esempio, BindableFunction.OnInvoke è una funzione di BindableFunction . Puoi impostare una funzione di nome o
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Tecniche di funzione
Handler degli eventi
Puoi assegnare una funzione, nota come gestore degli eventi, per essere eseguita quando si attiva un evento. Ad esempio, puoi creare una funzione chiamata onPlayerAdded() all'evento Players.PlayerAdded per stampare il nome di chiunque si unisca. Per ulteriori informazioni, vedi 2>Eventi2>.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Funzioni anonime
Puoi creare funzioni senza nomi, conosciute come funzioni anonime, da utilizzare come callback e gestori eventi. Come le funzioni con nomi, le funzioni anonime devono iniziare e finire con le parole chiave 2>function2> e 5>Terminare5>, ma non è necessario il 8>
Nell'esempio seguente, il callback per la funzione task.delay() e l'event handle per l'evento Players.PlayerAdded sono entrambe funzioni anonime.
-- Funzione anonima in un callback a task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329944
end)
-- Funzione anonima in un gestore di eventi
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Funzioni in ModuleScripts
Puoi riutilizzare le funzioni in più script memorizzandole in ModuleScripts . Le funzioni sono un inserisci / scrividi dati Luau, quindi puoi memorizzarle in tabelle con altri dati.
Funzioni varadiche
Una funzione variabile accetta qualsiasi numero di argomenti. Ad esempio, Globals.LuaGlobals.print() è una funzione variabile.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- La torta è una menzogna!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Difinire le funzioni varie
Per definire una funzione variabile, usi il token ... come ultimo o unico parametro (non confondere con .. , la concatenazione operatore . Puoi mettere i valori 2>...2> nella tabella per usare facilmente.
local function variadic(named, ...)
local arguments = {...} -- pack the extra arguments into a table
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Risultato di Output:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Avanzamento dell'argomento
Puoi definire funzioni varie come wrappers attorno ad altre funzioni per Passaggi di gioco, o avanti, gli argomenti dal writter alle altre funzioni.
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)
--[[ Risultato di Output:
Before
x = 1
y + z = 5
After
]]
Chiamare una funzione Variadica con Arrays
Se vuoi passare un matrice di valori a una funzione globale variadica, come print(), puoi usare la funzione globale unpack() per passare i valori della tabella invece che la tabella stessa.
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