GaGe

LUA_study(1~3장) 본문

Study/Lua

LUA_study(1~3장)

Sorrel 2022. 7. 11. 11:28

다른 언어와 다른 점이나 특히 기억에 남는 점을 기술

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