알맹이방
LUA_study(1~3장) 본문
다른 언어와 다른 점이나 특히 기억에 남는 점을 기술
0. 값
- print(type(nil)==nil) --false-- (왜냐하면 nil이라는 string을 반환하기 때문에 nil이 아니다.)
1. 인덱스
- 루아는 다른 언어와는 달리 인덱스가 1로 시작한다.
2. 테이블
- 루아의 거의 유일한 자료구조인 테이블은 객체이다.
- a.x은 a["x"]과 같음.
3. 함수
- 루아의 함수는 변수에 저장할 수 있다.
- 루아의 함수는 다른 함수의 인자로 넘길 수 있다.
- 루아의 함수는 다른 함수의 반환 받을 수도 있다.
- C로 작성한 함수도 호출할 수 있다.
4. string과 number
- .. : 문자열 합성 (print("A" .. "B"))
- string이 필요한 곳에는 number가 string이 된다. (..)
- number가 필요한 곳에는 string이 number가 된다. (+)
5. 비교연산
- ~= : 서로 다른지 검사
- 루아에서는 두 값이 같은 객체를 가리키고 있어야 동등하다고 판별한다. 모든 필드값이 같다고 해서 같은 객체는 아니다.
6. 논리연산
- and : 첫번째 인자가 거짓이면 첫번째 값을 반환, 참이면 두번째 인자를 반환
- or : 첫번째 인자가 참이면 첫번째 값을 반환, 거짓이면 두번째 인자를 반환
- 두 연산자는 두번째 피연산자는 필요할 때만 계산됨.
(예: type(v) == "table" and v.tag == "h1" --> v가 테이블이 아니면 v.tag를 실행하지 않는다.)
(예: x = x or v --> if not x then x = v end)
(예: a and b or c --> a?b:c)
- not : 루아는 0이 false, 값이 true가 아닌, 값이 있으면 true이다. print(0)은 true다.
6. 길이연산자
- '#' : 마지막
- print([#a]) : 순열 a의 마지막 값을 출력
- a = {10, 20, 30, nil, nil}은 길이가 3인 배열이기 때문에 중간이 비어있는 배열의 길이를 기억하기 위해서는 어딘가에 저장해둬야 한다.
7. 테이블생성자
polyline = { color="blue",
thicknes=2,
npoints=4,
{x=0, y=0}, --polyline[1]
{x=10, y=0}, --polyline[2]
{x0-10, y=1} --polyline[3]
}
print(polyline[2].x) --10
print(polyline[3].y) --1
- 음수 인덱스나 식별자가 아닌 문자열 인덱스로 필드를 초기화 하고 싶을 때 일반적인 초기화 형태
opnames = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"}
i=20; s="-"
a={[i+0]=s,[i+1]=s..s,[i+2]=s..s..s}
print(opnames[s]) --sub
print(a[22]) -----
복잡하지만 더 유연하다. 예시
a={1="red",2="green", 3="blue"}
==
a={[1]="red", [2]="green", [3]="blue"}
'Study > Lua' 카테고리의 다른 글
Lua_Study(dofile vs loadfile vs load) (0) | 2022.07.12 |
---|---|
Lua_Study(pairs와 ipairs의 차이점) (0) | 2022.07.12 |
Lua_Study(6장) (0) | 2022.07.11 |
Lua_Study(5장) (0) | 2022.07.11 |
Lua_Study(4장) (0) | 2022.07.11 |
Comments