Le funzioni sono blocchi di codice che puoi eseguire più volte su comando.Puoi anche connetterli a eventi o assegnarli come callback.
Funzioni di base
Una definizione di funzione include:
- Lo ambito della funzione (globale o local ).
- La parola chiave function .
- Il nome della funzione in camelCase .
- I parametri della funzione tra 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 di ritorno o utilizzare il valore di ritorno invece di una variabile.
-- Questa funzione non ha parametri e restituisce nil
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Chiamare una funzione senza Riportare
addOneAndTwo() -- 3
Parametri
I parametri sono variabili che metti a disposizione della funzione e vengono utilizzati solo nell'ambito della funzione scopo.Le funzioni non hanno parametri di base.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, la parola chiave return restituisce un risultato da una calcolazione.Puoi restituire più valori da una funzione. return termina l'esecuzione della funzione, e Luau si aspetta che la parola chiave end segua le dichiarazioni return, quindi scrivere codice tra il comando return e il comando end lancia un errore.
-- 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 aspettano l'oggetto stesso ( self ) come primo argomento.Quando chiami un metodo, usa la notazione colon ( : ) invece della notazione punto ( . ) per passare self come primo argomento automaticamente.
Tutti gli oggetti in Roblox discendono da Instance e hanno metodi comunemente utilizzati tra cui Instance:Destroy() , Instance:Clone() e Instance:FindFirstChild() .
local Workspace = game:GetService("Workspace")-- Distruggere una parte con notazione punto (funzione)local firstPart = Instance.new("Part")firstPart.Parent = Workspaceprint(firstPart.Parent) -- Area di lavorofirstPart.Destroy(firstPart)print(firstPart.Parent) -- nulla-- Distruggere una parte con notazione colon (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 del metodo come valore.Nella definizione del metodo, il parametro self si riferisce alla tabella padre del metodo.Quando chiami un metodo utilizzando la notazione colon, passi la tabella stessa come primo argomento.Puoi definire i parametri per un metodo, ma devi elencarli dopo il parametro self.
Nell'esempio seguente, la tabella testButton ha un metodo come valore della chiave changeEnabled.Puoi verificare che self si riferisce alla tabella padre del metodo stampando il valore di self.enabled .
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
Ritorni
I richiami sono funzioni che vengono eseguite in risposta ad un'altra funzione o processo.
Richiami di base
Le funzioni possono essere passate ad altre funzioni, ad esempio, una funzione anonima può essere utilizzata per implementare un callback che table.sort() poi usa per ordinare un elenco di Players da Players.GetPlayers().
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Usa una richiamata anonima per ordinare i giocatori per nome
return a.Name < b.Name
end)
Nell'API Roblox, le chiamate di ritorno si riferiscono a un Membridella funzione solo di lettura, le chiamate di ritorno si generano fino a quando non vengono Riportare. Le chiamate di ritorno ampiamente utilizzate includono:
- MarketplaceService.ProcessReceipt , che gestisce gli acquisti di prodotti per sviluppatori.
- 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, assegnale una funzione.Ad esempio, BindableFunction.OnInvoke è un callback di BindableFunction .Puoi impostare una funzione con nome o anonima e puoi chiamarla ( invocare ) chiamando il metodo su il Richiama.Gli argomenti che passi a :Invoke() in avanti alla funzione di Richiamae il valore di ritorno dalla funzione di richiamo torna al chiamante di :Invoke() .
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Tecniche di funzione
Gestori di eventi
Puoi assegnare una funzione, nota come gestore eventi , per essere eseguita quando si attiva un evento.Ad esempio, puoi creare una funzione chiamata onPlayerAdded() per l'evento Players.PlayerAdded per stampare il nome di qualunque giocatore che si unisce.Per ulteriori informazioni, vedi Eventi .
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, note come funzioni anonime , da utilizzare come callback e gestori di eventi.Come le funzioni con nome, le funzioni anonime devono iniziare e terminare con le parole chiave function e end, ma non hai bisogno della parola chiave local per indicare la scala locale perché hanno sempre una scala locale.
Nell'esempio seguente, il callback per la funzione task.delay() e l'event handler per l'evento Players.PlayerAdded sono entrambi funzioni anonime.
-- Funzione anonima in una richiamata a task.delay()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Funzione anonima in un gestore eventi
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Funzioni negli script del modulo
Puoi riutilizzare le funzioni attraverso più script memorizzandole in ModuleScripts .Le funzioni sono un inserisci / scrividi dato Luau, quindi puoi memorizzarle in tabelle con altri dati.
Funzioni variabili
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 bugia!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Definire funzioni variabili
Per definire una funzione variabile, usi il token come ultimo o unico parametro (non da confondersi con , l'operatore di concatenazione ).Puoi mettere i valori ... nella tabella per facilitare l'uso.
local function variadic(named, ...)
local arguments = {...} -- imballa gli argomenti extra in una tabella
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Output risultante:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Argomenti in avanti
Puoi definire funzioni variabili come involucri intorno ad altre funzioni per Passaggi di giocoo inviare argomenti dall' involucro 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)
--[[ Output risultante:
Before
x = 1
y + z = 5
After
]]
Chiama una funzione variabile con array
Se vuoi passare un array di valori di una tabella a una funzione variabile globale, come print(), puoi usare la funzione globale unpack() per passare i valori della tabella invece della 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