함수 는 명령에 여러 번 실행할 수 있는 코드 블록입니다. 이벤트에 연결하거나 콜백으로 지정할 수도 있습니다.
기본 함수
함수 정의에는 다음이 포함됩니다.
- 함수의 local (글로벌 또는 로컬).
- Function 키워드.
- 함수의 이름입니다. camelCase .
- 부모 함수의 매개 변수( >)>.
- 함수의 "신체"(코드 블록).
- 종료키워드.
함수 실행 시 바디가 실행됩니다. 함수를 호출하려면 부모 따옴표 다음에 함수 이름을 입력하십시오. 변수를 정의하여 반환 값을 수락하거나 변수 대신 반환 값을 사용할 수 있습니다.
-- 이 함수에는 매개 변수가 없으며 일반
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- 반환이 없는 함수 호출
addOneAndTwo() -- 3
매개 변수
매개 변수는 함수에 사용할 수 있는 변수이며 함수의 범위 내에서만 사용됩니다. 함수에는 기본적으로 매개 변수가 없습니다. 기대치를 초과하는 매개 변수를 가진 함수를 호출하면 Luau는 추가 매개 변수를 무시합니다. 기대치를 미리 알고 있는 함수에는 Luau는
-- 이 함수에는 두 개의 매개 변수가 있습니다: 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 문을 예약
-- 이 함수는 하나의 반환 값을 반환합니다.
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
메서드
메서드는 클래스 또는 테이블과 같은 개체의 멤버인 함수입니다. 메서드는 자체 클래스 또는 테이블 이 첫 번째 인수로 기대합니다. 메서드를 호출할 때 대시 기호가 아닌 콜론 기
Roblox의 모든 개체는 Instance 로부터 하위로 내려지며, Class.Instance:Destroy() Class.Instance:Clone() 2>Class.Instance:FindFirstChild() 5>Class.Instance:FindChild5> 등을 포함한 일반적으로 사용되는 메서드를 포함합니다.
-- 점 표기(함수)로 부품 파괴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 매개 변수는 메서드의 부모 테이블을 참조합니다. 콜론 기호를 사용하여 메서드를 호출할 때 테이블 자
다음 예에서, testButton 테이블에는 changeEnabled 키의 값으로 메서드가 있습니다. self 는 메서드의 상위 테이블을 인쇄하여 2>self.enabled2> 키를 참조하도록 합니다.
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- 참
-- 메서드 호출
testButton:changeEnabled(false) -- false
콜백
콜백은 다른 함수나 프로세스에 대한 반응으로 실행되는 함수입니다.
기본 호출
함수를 다른 함수에 전달할 수 있습니다. 예를 들어, 익명 함수는 Class.Players.GetPlayers() 를 구현하고 다음 2>Class.Players.GetPlayers()2> 를 사용하여 목록을 정렬하는 콜백을 구현합니다.
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- 익명 콜백을 사용하여 플레이어를 이름별로 정렬
return a.Name < b.Name
end)
Roblox API에서 콜백은 쓰기 전용 함수 멤버를 참조하고, 콜백은 반환할 때까지 생성됩니다. 널리 사용되는 콜백 구성 요소는 다음과 같습니다.
- BindableFunction.OnInvoke 는 스크립트가 BindableFunction:Invoke(...) 를 호출할 때 함수를 호출합니다.
- RemoteFunction.OnClientInvoke , 서버가 RemoteFunction:FireClient(player, ...) 또는 RemoteFunction:FireAllClients(...) 를 호출할 때 함수를 호출합니다.
- RemoteFunction.OnServerInvoke , 클라이언트가 RemoteFunction:InvokeServer(...) 를 호출할 때 함수를 호출합니다.
콜백을 설정하려면 함수를 할당하십시오. 예를 들어, BindableFunction.OnInvoke 는 BindableFunction 의 콜백입니다. 이
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
함수 기술
이벤트 처리기
이벤트 처리기로 알려진 함수를 할당하여 이벤트가 발생했을 때 실행할 수 있습니다. 예를 들어, 이벤트 처리기 함수를 만들어 onPlayerAdded() 이벤트에 이벤트 이름을 출력하는 함수를 생성할 수 있습니다. 자세한 내용은 Players.PlayerAdded 를 참조
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
익명 함수
익명 함수를 사용하려면 이름이 없는 함수를 생성하여 콜백 및 이벤트 처리기 를 사용할 수 있습니다. 이름이 있는 함수와 마찬가지로 익명 함수는 function 및
다음 예에서 task.delay() 함수의 콜백과 Players.PlayerAdded 이벤트의 이벤트 처리기는 모두 익명 함수입니다.
-- Anonymous function in a callback to task.延迟()
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)
모듈 스크립트의 함수
함수를 다른 데이터와 함께 테이블에 저장하여 여러 개의 스크립트에서 재사용할 수 있습니다. 함수는 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() 등의 글로벌 함수를 사용하여 테이블의 값을 테이블 자체 대신 전달할 수 있습니다.
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