Funkcje

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Funkcje są blokami kodu, które możesz wykonać wiele razy przy użyciu komendy. Możesz również połączyć je z wydarzeniami lub przypisać je jako wezwania .

Podstawowe funkcje

Definicja funkcji zawiera:

  • Zakres funkcji (globalny lub local).
  • Kluczowe słowo function.
  • Nazwa funkcji w camelCase .
  • Parametry funkcji w nawiasach ( () ).
  • Blok kodu, lub "ciało", funkcji.
  • Konfigurator end

Ciało funkcji jest wykonane, gdy wezwiecie funkcję. Aby wejść do funkcji, wpisz jego nazwę wraz z nawiasami. Możesz zdefiniować zmienne, aby zaakceptować wartość zwracaną lub użyć wartości zwracanej zamiast zmiennej.


-- Funkcja ta nie ma parametrów i zwraca nil
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Wezwanie funkcji bez zwrotu
addOneAndTwo() -- 3

Parametry

Parametry są zmienne, które możesz udostępnić funkcji i są używane tylko w zakresie funkcji scope. Funkcje nie mają parametrów domyślnie. Jeśli wezwiesz funkcję z więcej parametrów niż oczekuje, Luau ignoruje dodatkowe parametry. Jeśli wezwiesz funkcję z mniej parametrów niż oczekuje, Luau przeprowadza nil dla wszystkich parametrów błędnych.


-- Funkcja ta ma dwa parametry: num1 i 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

Powrót

W ciele funkcji return słowo kluczowe zwraca wynik z obliczenia. Możesz zwrócić wiele wartości z jednej funkcji. return zakończa wykonanie funkcji, a Luau oczekuje, że słowo kluczowe end będzie odpowiadać na 2>return


-- Funkcja ta zwraca jedną wartość zwracającą
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
-- Funkcja ta zwraca wiele wartości: sumę i różnicę
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Wezwanie funkcji i oczekiwanie na wiele wartości zwrotu
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

Metody

Methody są funkcjami, które są członkami obiektu, takimi jak klasa lub tabela. Oczekują one samego obiektu ( self ) jako pierwszego argumentu. Gdy wzywasz metodę, użyj znaku koliny ( 2> :2> ) zamiast znaku kropki ( 5> ) do przekaz

Wszystkie obiekty w Roblox pochodzą z Instance i mają używane metody, w tym Instance:Destroy() , Instance:Clone() i 1> Class.Instance:FindFirstChild()1>.


-- Niszczenie części z notacją kropki (funkcja)
local firstPart = Instance.new("Part")
firstPart.Parent = workspace
print(firstPart.Parent) -- Praca
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nie ma
-- Niszczenie części za pomocą zapisu kolonowego (metoda)
local secondPart = Instance.new("Part")
secondPart.Parent = workspace
print(secondPart.Parent) -- Praca
secondPart:Destroy()
print(secondPart.Parent) -- nil

Definiowanie metod

Aby utworzyć metodę w tabeli, użyj imienia metody jako klucza i funkcji metody jako wartości. W definicji metody self parametr odnosi się do matki metody. Gdy wywołasz metodę za pomocą znaku kolonowego, przekazujesz tabelę samą jako pierwszy argument. Możesz określić parametry dla metody, ale musisz je wymienić po parametrze self

W następnym przykładzie tabela testButton ma metodę jako wartość klucza changeEnabled. Możesz sprawdzić, że self odnosi się do metody rodzicielskiej metody poprzez wydrukowanie wartości 2>self.enabled2>.


local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- prawdziwy
-- Zadzwoń metoda
testButton:changeEnabled(false) -- false

Wezwania

Kwoty są funkcjami, które są wykonywane w odpowiedzi na inną funkcję lub proces.

Podstawowe wezwania

Funkcje można przekazać do innych funkcji, na przykład funkcja anonimowa może zostać użyta do wdrożenia kodeksu zwrotów, który Library.table.sortować() i potem używa do sortowania listy table.sort() z Players.


local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Użyj anonimowego zwrotu, aby sortować graczy według imienia
return a.Name < b.Name
end)

W API Roblox, wezwania odnoszą się do członka funkcji tylko do członek, a wezwania zwracają się, dopóki nie powrócą. Wiele używanych wezwywanych funkcji to:

Aby ustawić wiadomość zwrotną, przypisz funkcję do niej. Na przykład, BindableFunction.OnInvoke jest wiadomością zwrotną BindableFunction . Możesz ustawić


local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84

Techniki funkcjonalne

Przyczyny i skutki

Możesz przypisać funkcję, znaną jako obsługa zdarzeń, aby wykonać, gdy zdarzenie się uruchomi. Na przykład możesz stworzyć funkcję nazwaną onPlayerAdded() na wydarzeniu Players.PlayerAdded, aby wydrukować imię gracza, który dołączył. Dla więcej informacji, zobacz 2> wydarzenia2>.


local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

Anonimowe funkcje

Możesz tworzyć funkcje bez imienia, znane jako czyste funkcje, aby używać jako wezwywaczy i przetwarzaczy. Tak jak imienne funkcje, funkcje anonimowe muszą zacząć i zakończyć się z 2>funkcja2> i 5>end5> słow

W następnym przykładzie funkcja zwrotu dla funkcji task.delay() i wskaźnik wydarzenia dla funkcji Players.PlayerAdded są obie anonimowe funkcje.


-- Anonimowa funkcja w zwrocie w call_task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Anonimowa funkcja w identyfikatorze wydarzeń
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)

Funkcje w Modułach

Możesz ponownie używać funkcji w wielu skryptach, przechowując je w ModuleScripts. Funkcje są wpisywaćdanych Luau, więc możesz je przechować w tabelach z innymi danymi.

Funkcje wariadyczne

Funkcja variadic przyjmuje dowolną liczbę argumentów. Na przykład, Globals.LuaGlobals.print() jest funkcją variadic.


print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("The %s is a %s!", "cake", "lie")) -- Ciasto to kłamstwo!
print(string.char(115, 101, 99, 114, 101, 116)) -- secret

Definowanie funkcji werystycznych

Aby zdefiniować funkcję variadic, używasz tokenu ... jako ostatniego lub jedynego parametru (nie mylić z .. operatorem concatenation). Możesz umieścić wartości ... w tabeli dla ułatwienia użycia.


local function variadic(named, ...)
local arguments = {...} -- spakuj dodatkowe argumenty w tabeli
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Wyświetlany wynik:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]

Przekazywanie argumentów

Możesz zdefiniować funkcje werzyjne jako wiązania wokół innych funkcji, aby przepustkalub przekazać argumenty z wiązania do innych funkcji.


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)
--[[ Wyświetlany wynik:
Before
x = 1
y + z = 5
After
]]

Wyzwanie funkcji werystycznej z użyciem matryc

Jeśli chcesz przekazać globalnej funkcji wielostukowej wartości tabeli, takiej jak print(), możesz użyć globalnej funkcji unpack(), aby przekazać wartości tabeli zamiast samej tabeli.


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