English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Lua 변수

변수를 사용하기 전에 코드에서 선언해야 합니다. 즉, 해당 변수를 생성해야 합니다.

컴파일러가 코드를 실행하기 전에 문장 변수에 저장공간을 할당하는 방법을 알아야 합니다. 이는 변수의 값을 저장하는 데 사용됩니다.

Lua 변수는 세 가지 유형이 있습니다: 전역 변수, 부분 변수, 테이블의 필드.

Lua의 변수는 모두 전역 변수입니다. 문장 블록이나 함수 내에서도 local로 명시적으로 전역 변수로 선언하지 않으면 전역 변수입니다.

부분 변수의 범위는 선언 위치에서 시작하여 해당 문장 블록의 끝까지입니다.

변수의 기본 값은 모두 nil입니다.

-- test.lua 파일 스크립트
a = 5               -- 전역 변수
local b = 5         -- 부분 변수
function joke()
    c = 5           -- 전역 변수
    local d = 6     -- 부분 변수
end
joke()
print(c, d)          --> 5 nil
do 
    local a = 6     -- 부분 변수
    b = 6           -- 부분 변수에 대한 재할당
    print(a, b);     --> 6 6
end
print(a,b)      --> 5 6

위의 예제를 실행한 결과는 다음과 같습니다:

$ lua test.lua 
5    nil
6    6
5    6

할당 문장

할당은 변수의 값을 변경하거나 테이블 필드를 변경하는 가장 기본적인 방법입니다.

a = "hello" .. "world"
t.n = t.n + 1

Lua는 여러 변수에 대해 동시에 할당할 수 있습니다. 변수 목록과 값 목록의 각 요소는 콤마로 구분되며, 할당 문장의 우측의 값은 차례대로 왼쪽의 변수에 할당됩니다.

a, b = 10, 2*x       <-->       a =10; b =2*x

변수 할당 문장을 만나면 Lua는 우측의 모든 값을 먼저 계산한 후 할당 작업을 수행합니다. 따라서 변수 값을 교환할 수 있습니다:

x, y = y, x                     -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]         -- swap 'a[i]' for 'a[j]'

변수 개수와 값 개수가 일치하지 않을 때, Lua는 다음과 같은 전략을 사용하여 변수 개수를 기준으로 항상 행동합니다:

a. variable count > value count             nil is added to fill the variable count
b. variable count < value count             excess values are ignored
a, b, c = 0, 1
print(a,b,c)             --> 0   1   nil
 
a, b = a+1, b+1, b+2     -- value of b+2 is ignored
print(a,b)               --> 1   2
 
a, b, c = 0
print(a,b,c)             --> 0   nil   nil

위의 마지막 예제는 일반적인 오류 상황입니다. 주의하세요: 여러 변수에 대해 할당하려면 각 변수에 대해 순차적으로 할당해야 합니다.

a, b, c = 0, 0, 0
print(a,b,c)             --> 0   0   0

다중 값 할당은 변수 교환 또는 함수 호출 결과를 변수에 할당하는 데 자주 사용됩니다:

a, b = f()

f()는 두 값을 반환하며, 첫 번째 값을 a에, 두 번째 값을 b에 할당합니다.

가능한 한 로컬 변수를 사용해야 합니다. 이는 두 가지 이점이 있습니다:

  • 1. 이름 충돌을 피합니다.

  • 2. 로컬 변수에 접근하는 속도가 전역 변수보다 빠릅니다.

인덱스

테이블의 인덱스는 괄호 []를 사용합니다. Lua는 . 연산도 제공합니다.

t[i]
t.i                 -- 인덱스가 문자열 유형일 때의 간단한 표현
gettable_event(t,i) -- 인덱스를 사용한 접근은 이와 같은 함수 호출과 유사합니다
> site = {}
> site["key"] = "ko.oldtoolbag.com"
> print(site["key"])
ko.oldtoolbag.com
> print(site.key)
ko.oldtoolbag.com