[Lua] 표현식

Lua Script 2018. 3. 27. 20:14

1. 비교 연산
: 일반적인 언어와 같다. <, >, <=, >=, ==, ~= 을 지원한다. 
테이블과 유저데이터의 동등성은 참조 값(주소 값)이 같은지로 판별한다. 


2. 논리 연산자
: and, or, not이 있다. 
- and : C의 && 
- or : C의 || 
- not : C의 !


3. 테이블 생성자
: 생성자는 테이블을 생성하고 초기화하는 표현식이다. 테이블 생성자는 아주 유용하고 다재다능하게 활용되는 루아의 독특한 기능이다. 

days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" } 
print(days[4]) --> "Wednesday" 
-- 테이블의 index는 기본적으로 1부터 시작한다. 

a = { "x" = 10, "y" = 20 } 

위처럼 Dictionary와 비슷하게 사용할 수도 있다. 

polyline = {
                   color = "blue",
                   thickness = 2 ,
                   {x = 0, y = 0},   --polyline[1]
                   {x = -10, y = 0} --polyline[2]
                 }

print(polyline[2].x) --> -10

위처럼 배열형식과 Dictionary 형식을 함께 사용해서 초기화할 수 있으며 테이블안에 테이블을 넣는것도 가능하다. 

b = { x = 10, y = 45; "one", "two", "three" }

위와같이 "," 와 ";" 둘 모두 구분자로 사용 가능하다. 


'Lua Script' 카테고리의 다른 글

[Lua] 함수의 내부  (0) 2018.03.28
[Lua] 함수  (0) 2018.03.27
[Lua] 문장  (0) 2018.03.27
[Lua] 타입과 값  (0) 2018.03.27
[Lua] 기본 문법  (0) 2018.03.27
Posted by 홍성곤
,

[Lua] 타입과 값

Lua Script 2018. 3. 27. 18:46

Introduction
: 루아는 동적 타입 언어다. 루아에서는 모든 값마다 타입이 있으므로, 변수를 선언할 때 타입을 지정하지 않는다. 

8가지 기본타입이 있다. 
- nil, boolean, number, string, userdata, function, thread, table

print(type(print)) --> function

a = print 
-- 이렇게 써도 문제가 없다. function도 하나의 타입이기 때문이다. 


1. 강제 변환
: 루아는 실행 중에 숫자와 문자열 사이의 자동 변환을 지원한다. 

print("10" + 1) --> 11
print("10" + "1") --> 11

반대로 문자열이 필요한 곳에 실수 값이 있으면 실수 값을 문자열로 변환한다.

print(10 ... 20)  --> 1020
-- ".."은 루아에서 문자열을 이어붙이는 연산이다. 

10 == "10" 의 결과값은 거짓이다. 
명시적으로 문자열을 실수로 변환할 때는 tonumber 함수를 쓰면 된다. tonumber는 문자열이 실수를 표기하지 않는 경우 nil을 반환한다. 

실수를 문자열로 변환하려면 tostring 함수를 호출하거나 10 .. "" 이처럼 실수에 빈문자열을 연결하면 된다. 


2. 테이블
: 테이블 타입은 연관 배열의 구현체이다. 여기서 연관 배열은 배열의 인덱스로 실수 이외에도 nil을 제외한 나머지 모든 값을 쓸 수 있는 배열을 말한다. 

테이블은 루아에서 유일한 자료구조이다. 또한 패키지나 객체를 표현하기 위해 테이블을 사용하기도 한다.
예를들어, io.read를 쓸때는 "io 모듈의 read 함수" 라는 의미로 쓴다. 루아에서 이 표현식은 "io 테이블에서 read라는 문자열을 키로 사용해서 찾은 것"을 의미한다. 

루아의 테이블은 객체다. 즉, 프로그램은 테이블에 대한 참조나 포인터만 조작한다. 따라서, 의도하지 않게 객체의 사본이 만들어지거나 새 테이블이 생성되는 경우는 없다. 

a = {} -- 테이블을 생성하고 a로 해당 테이블 참조
k = "x"
a[k] = 10
a[20] = "great"
print(a["x"]) --> 10
k = 20 
print(a[k]) --> great

더이상 테이블을 참조하는 변수가 없어지면 루아의 가비지 컬렉터가 메모리를 회수해간다. 

print(a["y"]) --> nil

위처럼 초기화되지 않은 필드의 값은 nil이 된다. 역시 전역변수와 마찬가지로 필드에 nil을 대입하면 필드가 삭제된다. 

print(a.x) --> 10 
-- a["x"]와 같음

#a 로 a 테이블의 길이를 얻어올 수 있다. 그러나 의도와는 다른값이 나올 수 있다.
예를들어 처음에는 10개 짜리 길이의 테이블이었는데 도중에 5번째 인덱스에 nil을 집어넣어 테이블의 값을 지우고 다시 #a로 길이를 참조하면 그래도 10이다. 

for i, j in pairs(a) do

end

그러나 위와같이 사용하면 a의 5번째 인덱스는 건너뛰고 순회한다. 


3. 함수
: 루아의 함수는 변수에 저장할 수 있고 다른 함수의 인자로 넘길 수 있으며 함수를 반환 받을 수도 있다. 


4. 유저데이터
: 유저데이터 타입을 써서 임의의 C 데이터를 루아 변수에 저장할 수 있다. C로 작성된 응용 프로그램이나 라이브러리에서 정의한 새로운 타입을 표현하기 위해 유저데이터를 사용한다.


'Lua Script' 카테고리의 다른 글

[Lua] 함수의 내부  (0) 2018.03.28
[Lua] 함수  (0) 2018.03.27
[Lua] 문장  (0) 2018.03.27
[Lua] 표현식  (0) 2018.03.27
[Lua] 기본 문법  (0) 2018.03.27
Posted by 홍성곤
,

[Lua] 기본 문법

Lua Script 2018. 3. 27. 18:19

1. 청크
: 루아가 실행하는 코드조각
: 청크는 "Hello World" 처럼 한줄로 간단할 수도 있고, ".lua" 파일로 묶어서 파일단위로 청크가 되기도 한다. 

독립적인 인터프리터가 컴퓨터에 설치되어 있다면 커멘드창에서

$ lua 파일이름.lua

이런식으로 실행시킬수 있다. 

$ lua -i 파일이름.lua 

위 명령은 해당 파일에 있는 코드를 실행한 후 대화모드로 넘어간다.

그냥 lua만 입력하면 바로 대화모드로 들어간다. 여기서 lua 코드를 입력하면 바로 실행 결과값이 나타난다. 

대화 모드에서 다른 .lua 파일을 불러올 수 있다.

> dofile("파일이름.lua")
n = norm(1.0, 1.5)  -- 위에서 불러온 파일에 있는 함수 호출

* 대화 모드에서는 local을 이용해서 지역변수를 사용하지 말자. 대화 모드에서는 한줄 한줄이 각기 다른 청크이기 때문에 이전에 선언한 local 변수가 바로 다음줄에서 유효하지 않다. 


2. 주석
한줄 주석 : -- 나는 주석이다.

여러줄 주석 :
-- [[ 
나는 주석
]] -- 


3. 전역 변수 
: 전역 변수는 선언할 필요가 없다. 그냥 쓰면 된다. 선언되지 않은 변수를 사용하면 그냥 nil이 들어갈 뿐이다. 

print(b) --> nil
b = 10
print(b) --> 10 

b = nil 
-- 이렇게 변수에 nil을 대입하면 그 변수에서 사용했던 메모리를 재활용할 수 있게 된다. 



'Lua Script' 카테고리의 다른 글

[Lua] 함수의 내부  (0) 2018.03.28
[Lua] 함수  (0) 2018.03.27
[Lua] 문장  (0) 2018.03.27
[Lua] 표현식  (0) 2018.03.27
[Lua] 타입과 값  (0) 2018.03.27
Posted by 홍성곤
,