함수 는 명령에 여러 번 실행할 수 있는 코드 블록입니다.또한 이벤트에 연결하거나 콜백으로 지정할 수도 있습니다.
기본 기능
함수 정의에는 다음이 포함됩니다:
- 함수의 범위(전역 또는 local).
- function 키워드.
- camelCase 에서 함수의 이름.
- 괄호 안의 함수 매개변수(()).
- 함수의 코드 블록 또는 "신체".
- end 키워드.
함수의 본문은 함수를 호출할 때 실행됩니다.함수를 호출하려면 괄호 뒤에 이름을 입력하십시오.변수를 정의하여 반환 값을 수락하거나 변수 대신 반환 값을 사용할 수 있습니다.
-- 이 함수에는 매개 변수가 없으며 반환 값은 nil입니다.
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- 반환 없이 함수 호출
addOneAndTwo() -- 3
매개 변수
매개 변수는 함수에 제공하는 변수이며, 함수의 범위에서만 사용됩니다.기능에는 기본적으로 매개변수가 없습니다.루au는 예상보다 더 많은 매개변수를 호출하면 추가 매개변수를 무시합니다.예상보다 적은 매개변수로 함수를 호출하면 Luau는 모든 누락된 매개변수에 대해 nil를 전달합니다.
-- 이 함수에는 num1과 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
반환
함수의 본문에서 return 키워드는 계산에서 결과를 반환합니다.하나의 함수에서 여러 값을 반환할 수 있습니다.return 함수 실행을 종료하고 Luau는 end 키워드가 return 문구를 따르기를 기대하므로 명령 return와 명령 end 사이에서 코드를 작성하면 오류가 throw됩니다.
-- 이 함수는 하나의 반환 값을 반환합니다
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
-- 이 함수는 여러 값을 반환합니다: 합계와 차이
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- 함수 호출 및 여러 반환 값 기대하기
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
방법
메서드는 클래스 나 테이블 과 같이 개체의 멤버인 함수입니다.그들은 개체 자체(self)를 첫 번째 인수로 기대합니다.메서드를 호출할 때 점 표기법(:) 대신 콜론 표기법(.)을 사용하여 자동으로 첫 번째 인수로 self를 전달합니다.
Roblox의 모든 개체는 Instance 에서 내려오며 Instance:Destroy() , Instance:Clone() 및 Instance:FindFirstChild() 을 포함하는 일반적으로 사용되는 메서드를 가지고 있습니다.
local Workspace = game:GetService("Workspace")-- 점 표기로 부품 파괴(함수)local firstPart = Instance.new("Part")firstPart.Parent = Workspaceprint(firstPart.Parent) -- 작업 공간firstPart.Destroy(firstPart)print(firstPart.Parent) -- 무효-- 콜론 표기로 부품 삭제(메서드)local secondPart = Instance.new("Part")secondPart.Parent = Workspaceprint(secondPart.Parent) -- 작업 공간secondPart:Destroy()print(secondPart.Parent) -- nil
메서드 정의
테이블에서 메서드를 생성하려면 메서드 이름을 키로 사용하고 메서드 함수를 값으로 사용합니다.메서드 정의에서 self 매개 변수는 메서드의 부모 테이블을 참조합니다.콜론 표기법을 사용하여 메서드를 호출할 때 첫 번째 인수로 테이블 자체를 전달합니다.메서드에 대한 매개변수를 정의할 수 있지만, self 매개변수 뒤에 목록을 나열해야 합니다.
다음 예제에서는 testButton 테이블에 키 changeEnabled의 값으로 메서드가 있습니다.self 이 메서드의 부모 테이블을 참조하는지 확인하려면 self.enabled 의 값을 인쇄할 수 있습니다.
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- 참
-- 메서드 호출
testButton:changeEnabled(false) -- false
콜백
콜백은 다른 함수나 프로세스에 대한 응답으로 실행되는 함수입니다.
기본 콜백
함수는 다른 함수에 전달될 수 있습니다(예: 무명 함수는 나중에 사용하여 목록을 정렬하기 위한 콜백을 구현하는 데 사용될 수 있음).
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- 익명 콜백을 사용하여 플레이어를 이름별로 정렬
return a.Name < b.Name
end)
Roblox API에서 콜백은 쓰기 전용 함수 멤버를 참조하며, 반환될 때까지 콜백이 생성됩니다. 널리 사용되는 콜백에는 다음이 포함됩니다.
- MarketplaceService.ProcessReceipt , 개발자 제품 구매를 처리하는 제품
- BindableFunction.OnInvoke , 스크립트가 BindableFunction:Invoke(...) 를 호출할 때 함수를 호출하는 것
- RemoteFunction.OnClientInvoke , 서버가 RemoteFunction:FireClient(player, ...) 또는 RemoteFunction:FireAllClients(...) 을 호출할 때 함수를 호출하는 것
- RemoteFunction.OnServerInvoke , 클라이언트가 RemoteFunction:InvokeServer(...) 를 호출할 때 함수를 호출하는 것
콜백을 설정하려면 함수를 할당하십시오.예를 들어, BindableFunction.OnInvoke 는 BindableFunction 의 콜백입니다.명명된 또는 무명 함수를 설정하고 콜백에서 해당 함수를 호출하여 (호출) 해당 함수를 호출할 수 있습니다.:Invoke() 에 전달하는 인수와 콜백 함수에서 반환된 반환 값은 호출자에게 반환됩니다 :Invoke() .
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
함수 기술
이벤트 처리기
이벤트 처리기라고 하는 함수를 할당하여 이벤트가 발생할 때 실행할 수 있습니다.You can assign a function, known as an event handler , to execute when an event fires.예를 들어, onPlayerAdded() 이벤트에 Players.PlayerAdded 함수를 생성하여 어떤 플레이어가 참여하는지 이름을 인쇄할 수 있습니다.자세한 내용은 이벤트를 참조하십시오.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
무명 함수
이름이 없는 함수를 생성하여 익명 함수 로 사용할 수 있으며, 콜백과 이벤트 처리기를 사용할 수 있습니다.명명된 함수와 마찬가지로, 무명 함수는 function 및 end 키워드로 시작하고 종료해야 하지만, 항상 로컬 범위가 있기 때문에 로컬 범위를 나타내기 위해 local 키워드가 필요하지 않습니다.
다음 예제에서는 task.delay() 함수의 콜백과 Players.PlayerAdded 이벤트의 이벤트 처리기 모두 익명 함수입니다.
-- task.delay()에 대한 익명 함수
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- 이벤트 처리기의 익명 함수
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
모듈 스크립트의 기능
함수를 ModuleScripts에 저장하여 여러 스크립트에서 재사용할 수 있습니다.함수는 Luau 데이터 입력다른 데이터와 함께 테이블에 저장할 수 있습니다.
변리적 함수
변수 함수는 어떤 수의 인수를 받습니다. 예를 들어, Globals.LuaGlobals.print() 는 변수 함수입니다.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- 케이크는 거짓말입니다!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
다양한 함수 정의
변형 함수를 정의하려면 ... 토큰을 마지막 또는 유일한 매개변수(..와 혼동되지 않음)로 사용하고 연산자를 사용합니다.사용 편의를 위해 ... 값을 테이블에 넣을 수 있습니다.
local function variadic(named, ...)
local arguments = {...} -- 추가 인수를 테이블로 팩하기
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ 결과 출력:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
앞쪽 인수
다양한 함수를 다른 함수의 래퍼로 정의하여 래퍼에서 다른 함수로 인수를 패스전달할 수 있습니다.
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)
--[[ 결과 출력:
Before
x = 1
y + z = 5
After
]]
배열로 다형 함수 호출
값 배열의 테이블 배열을 전역 다형식 함수에 전달하려는 경우, print()와 같이, 전역 unpack() 함수를 사용하여 테이블 자체 대신 값을 전달할 수 있습니다.
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