스크립팅코드 블록은 제어 구조 또는 함수의 몸입니다. 변수 또는 함수의 범위 는 액세스할 수 있는 코드 블록입니다. 글로벌 변수 또는 함수의 경우 1>글로벌
변수 및 함수는 기본적으로 전역 범위를 가지지만 이 경우 대부분 지역 범위를 선언하는 것이 좋습니다, 왜냐하면 Luau는 전역 변수에 액세스하는 것보다 지역 변수에 액세스하는 것이 훨씬 더 빠르기 때문입니다. 변수 또는 함수를 지역 범위에 선언하려면 이름 앞에 키
스크립트는 다른 스크립트의 글로벌 및 로컬 변수나 함수에 액세스할 수 없습니다. 값과 함수를 스크립트 간에 공유하려면 ModuleScripts 를 사용하십시오.
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
- 블록 B 는 블록 A의 로컬 변수에 액세스할 수 있습니다.
- 블록 C 는 블록 A 및 B에 있는 로컬 변수 및 함수에 액세스할 수 있습니다.
- 블록 A 는 블록 B 또는 C에 있는 로컬 변수 및 함수에 액세스할 수 없습니다.
- 블록 B 는 블록 C의 로컬 변수에 액세스할 수 없습니다.
전역 범위
글로벌 변수 또는 함수를 선언한 후 동일한 스크립트의 모든 코드 블록에서 액세스할 수 있습니다. 변수 및 함수는 local 키워드로 선언하지 않으면 전역 범위를 가지지 않습니다.
다음 코드에서, testVar 는 로컬의 testFunc() 함수 내에서 전역 범위를 가지고 있습니다. testFunc() 가 Luau를
Example of global functions and variables
local function testFunc() -- 로컬 범위
testVar = 64 -- 전역 범위
end
testFunc()
print(testVar) -- 64
다음 코드에서 전역 변수 x 는 0 에서 시작하고, 각 1 반복으로 1>2> for1> 루프의 끝에 인크리먼트하고 마지막으로 4와 함께 출력합니다.
x = 0 -- 전역 변수 "x"for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ 결과 출력:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
전역 변수 및 함수를 선언하는 것이 더 쉬우므로 글로벌 변수 및 함수를 선언하는 것이 더 쉽습니다. 그러나 전역 변수 및 함수는 다음과 같은 단점이 있습니다.
- Luau는 해시 검색을 사용하여 전역 변수 및 함수에 액세스하므로 이행측면에서 사용하는 것이 비용이 많이 듭니다. 시간 크리티컬 루프에서 전역 변수를 사용하면 로컬 변수를 사용하는 것보다 10% 이상 느릴 수 있습니다.
- Luau는 범위가 끝난 후 로컬 변수를 제거하여 메모리 사용을 줄입니다.
- 따라서 글로벌 변수 또는 함수에 액세스하려면 여러 스크립트 간에 액세스할 수 없습니다. 글로벌 변수 또는 함수에 액세스하려면 범위 내 지역 대체, upvalue 또는 그림자를 통해 이점이 제공되지 않습니다.
로컬 범위
Luau는 코드 블록에서 선언한 지역 변수 또는 함수에만 액세스할 수 있습니다. 지역 범위를 가진 변수를 만드면 해당 값이 언제 변경되는지 더 엄격하게 제어할 수 있습니다.
다음 코드에서 testFunc() 함수와
local function testFunc() -- 로컬 범위
local testVar = 64 -- 로컬 범위
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
다음 코드에서 로컬 변수 x 는 1번째 줄에서 0 의 값을 가지고 있습니다. Luau는 for 루프를 반복하면서 다른 로컬 변수
local x = 0 -- 로컬 변수 "x"for i = 1, 4 dolocal x = 1 -- 다른 변수 "x", 이 "for" 루프에 로컬print("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ 결과 출력:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
점령
로컬 변수를 선언하고 할당하면 해당 변수가 포함된 범위 수준의 범위 및 함수를 읽을 수 있습니다. 이 기술은 점령 이라고 합니다.
다음 코드에서 함수 f 는 로컬 변수 x 를 캡처합니다. 변수 x 는 1> f()1> 에 있습니다. 변수 4> x4> 는 7>upvalue7>입니다.
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
그림자
로컬 변수를 선언하고 할당하면 범위 수준에서 범위 수준으로 읽을 수 있습니다. 내림 범위 레벨변수를 재정의하고 재할당하면 이름이 동일하지만 다른 값을 가진 새로운 로컬 변수를 생성합니다. 이 기술
다음 코드에서 Luau는 변수 x 를 그녀줍니다. x 변수는 f() 에 있는 그림자 변수입니다.
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
값을 할당하지 않고 로컬 변수를 다시 선언하여 범위 수준에서 모두 변수를 다시 할당할 수 있습니다. 값을 할당하지 않고 로컬 변수를 다시 선언하면 값을 nil 로 설정합니다.
다음 코드에서 Luau는 함수 <
local fruitName = "Chocolate"
local fruitTable = {
Lemon = "Yellow",
Apple = "Red",
Orange = "Orange"
}
local function getFruitByColor(color)
local fruitName
for key, value in fruitTable do
if value == color then
fruitName = key
end
end
return fruitName
end
local fruit = getFruitByColor("Yellow")
print(fruit) -- 레몬
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate