함수

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

함수 는 명령에 여러 번 실행할 수 있는 코드 블록입니다.또한 이벤트에 연결하거나 콜백으로 지정할 수도 있습니다.

기본 기능

함수 정의에는 다음이 포함됩니다:

  • 함수의 범위(전역 또는 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 = Workspace
print(firstPart.Parent) -- 작업 공간
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- 무효
-- 콜론 표기로 부품 삭제(메서드)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(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에서 콜백은 쓰기 전용 함수 멤버를 참조하며, 반환될 때까지 콜백이 생성됩니다. 널리 사용되는 콜백에는 다음이 포함됩니다.

콜백을 설정하려면 함수를 할당하십시오.예를 들어, BindableFunction.OnInvokeBindableFunction 의 콜백입니다.명명된 또는 무명 함수를 설정하고 콜백에서 해당 함수를 호출하여 (호출) 해당 함수를 호출할 수 있습니다.: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)

무명 함수

이름이 없는 함수를 생성하여 익명 함수 로 사용할 수 있으며, 콜백이벤트 처리기를 사용할 수 있습니다.명명된 함수와 마찬가지로, 무명 함수는 functionend 키워드로 시작하고 종료해야 하지만, 항상 로컬 범위가 있기 때문에 로컬 범위를 나타내기 위해 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 = 4
print(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