반응형

루아에서 변수란 "어떤 값을 담고 있는 것의 명칭" 으로 정의한다. 즉 앞서 설명한 데이타 타입의 값은 모두 변수에 저장된다.

 

루아에서는 다음과 같이 다중 대입이 가능하다. [루아스크립트]

 

  • x = y = 10 -- x 와 y 에 동시에 10을 대입한다.
     
  • z = 20
  • x,z = z , x  -- x와 z의 값을 교환, 즉 x = 20 , z 는 10이 담기게 된다.
     
  • y, z = 5, 7  -- y = 5; z = 7 과 동일하다

 

숫자

 

다음 예제와 같은 연산이 가능하다.

 

a = 10 + 4 -- 덧셈

b = 5 * 5 -- 곱셈

c = 10 - 40.4 -- 뺄셈

d = 55/5.3 나눗셈

e = 10 ^ 3 -- 거듭제곱 (승)

 

또한 루아에서는 math 라는 객체에서 mod() 라는 함수를 제공한다. math 라이브러리는 루아의 수학적 연산 관련 함수들을 제공한다.

 

 

 

문자열

 

  • 루아에서의 문자열내에서 글자에 대한 인덱싱은 1부터 시작한다. C 언어와 같이 0 이 아니다.
  • 음수 인덱싱도 허용된다. 이때는 문자열의 맨 끝에서 부터 역으로 인덱싱을 하게 되다. 즉 -1 은 문자열의 맨 마지막 문자를 나타낸다.
  • 두개의 문자열의 병합은 ".." 연산자를 사용한다. 다음은 두개의 문자열을 합쳐 하나의 문자열로 만드는 것이다.
     
    a = "abc"
    b = "123"
    c = a..b
     
    c 는 "abc123" 이 된다.

 

 

문자열 제어 함수

 

문자열 제어 함수 라이브러리는 문자열 관리를 위한 검색, 부분문자열의 추출, 패턴 대입등등을 지원하는 일반 함수들을 제공한다.

문자열 라이브러리의 모든 함수는 테이블 string 내에 담겨 있다.

 

string.byte(s,[,i])

 

문자열 s의 i번째 문자의 내부 숫자로 표현된(예를 들면 , 아스키 코드값) 코드를 반환한다. 만일 i를 지정하지 않으면 1로 간주 된다. i는 물론 음수로 지정될 수 있다.

 

string.char(i1,i2,....)

 

0 이상의 정수만을 인자로 받는다. 각각의 숫자가 나타내는 코드에 해당되는 문자를 반환 한다. 결국 i1,i2 등의 인자는 아스키 코드값들이 된다.

 

 

string.find(s, pattern [, init[, plain]])

  • 문자열 s내에서 pattern에 가장 첫번째로 맞는 부분을 찾아 반환한다. 만약 한개를 찾았다면 find()함수는 일치점의 시작과 끝을 나타내는 s의 인덱스들를 반환한다. 찾지 못하면 nil을 반환한다.
  • 만약 pattern 문자열내에 "캡쳐"옵션이 지정되어 있다면, 캡쳐된 문자열들도 반환값에 포함되어 반환된다.
  • init 인자는 어디서부터 검색을 시작할 것인지에 대한 s 문자열내의 인덱스를 지정한다. 지정하지 않으면 1로 간주되며, 음수지정도 가능하다.
  • plain 인자의 값을 true로 놓으면 패턴 매칭 기능을 끄는 효과가 있다. 이것은 아주 평범한(plain) 부분 문자열을 검색하는 명령이 되며, pattern 인자내에 들어있는 값들은 무시된다. 
    만일 plain 인자를 true로 지정하면 init도 반드시 지정해야 한다는 점에 주의해라. plain은 지정하지 않으면 당연히 false로 간주된다.

 

string.len(s)
 

문자열의 길이를 반환한다. ""(빈 문자열)은 0을 반환한다. 첨부된 0값도 갯수에 포함된다. 그러므로

 

예를 들면 "a\000b\000c"의 길이는 5가 된다. 

 

 

string.lower(s)

 

주어진 문자열을 모두 소문자로 바꾸고 그 결과 문자열의 복사본을 반환한다. (원본은 바뀌지 않는다.) 대소문자에 대한 구분은 현재 로케일 설정을 따른다.

 

string.rep(s,n)

문자열 s를 n번 반복하여 모두 병합한 값을 반환한다. 

string.sub(s,i,[,j])

문자열 s내에서 i에서 시작하고 j에서 끝나는 부분에 대한 부분 문자열을 반환한다. i와 j는 음수 지정이 가능하다. j를 지정하지 않으면, -1로 간주된다. (즉, i에서 끝까지의 영역을 나타내게 된다.) 여러가지 지정을 예를 들면, 만일 문자열 s의 길이 j 만큼의 접두어를 때어내려면, string.sub(s, 1, j)라고 지정하면 되며, string.sub(s, -i)는 문자열 s에서 i길이 만큼의 접미어를 때내는 효과가 있다. 

 

string.upper(s)

문자열 내의 모든 소문자들을 대문자로 바꾼 결과를 반환한다. 대소문자에 대한 구분은 현재 로케일 설정을 따른다.

 

string.format(formatstring,e1,e2,....)

  • 첫번째 인자(반드시 문자열이어야 함)로 주어지는 정의를 따라서 다양한 수의 인자들을 잘 포맷한 결과물을 반환한다. C 언어에서 printf() 함수를 생각하면 된다. 내부 포맷룰도 같지만, 다음과 같은 차이가 있다.
    • *, l, L, n, p, h는 지원되지 않는다.
    • q 옵션이 제공된다. the q option formats a string in a form suitable to be safety read back by the Lua interpreter : The string is written between double quotes, and all double quotes, returns, and backslashs in the string are correctly escaped when written. For instance, the call <PRE>string.format('%q', 'a string with "quotes" and \n new line')</PRE>
      will produce the string:
      <PRE>"a string with \"quotes\" and \newline"</PRE>
  • c, d, E, e, f, g, G, i, o, u, X, x와 같은 모든 옵션은 숫자를 적용하여 사용하며, q와 s만 문자열을 적용하여 사용된다. the * modifier can be simulated by building th appropriate format string. For example, "%*g" can be simulated with "%"..width.."g". 

    주의 : %s로 포맷되는 문자열 값은 '내장된 0' 값을 포함할 수 없다. 

     

     

    테이블

    다음의 예문은 "temp" 라는 table에 차례로 "a","b","c"라는 값을 설정하는 것입니다. <PRE>temp = {"a","b","c"}</PRE>위의 예문의 테이블에서 값을 가져오려면. []를 사용하시면 됩니다.


     

    다음의 예문은 위에서 작성한 "temp"에서 첫번째 값을 가져오는겁니다. <PRE>print(temp[1])결과: a</PRE>

     

     

    테이블 관련 함수들

     

    table.foreach(테이블,함수)

  • 지정한 '테이블'의 각 값에 대해 각각 '함수'를 실행합니다. (상당히 유용한 함수!)
  • 순서는 인덱스값의 순서대로 실행됩니다.
  • '함수'가 매번 실행될때마다 "인덱스, 값"으로 한번에 2개씩 인자를 넘깁니다.
  • 다음은 t1 테이블의 각 요소를 화면에 출력하는 예제입니다. (print 다음에 ()가 없다는 것에 주목!)

     

     

    table.foreach(t1, print)

     

    > t1 = {}
    > t1.redpixel = 10
    > t1.whitepixel = 30
    > t1.raktavisa = 20
    > t1.hong = 40
    > table.foreach(t1, print)
    raktavisa       20
    hong    40
    redpixel        10
    whitepixel      30

     

     

    table.foreachi(테이블,함수)

  • 지정한 '테이블'의 각 값에 대해 인덱스의 순서대로 각각 '함수'를 실행합니다.
  • 즉, 테이블의 인덱스는 반드시 숫자로 지정되어있어야하고 1에서 n까지 숫자의 건너뜀없이 지정되어 있어야 합니다!
  • foreach()를 숫자 인덱스에 의해 마치 for문처럼 실행하고자 할 때 사용합니다.
  • 다음은 foreach(), foreachi()의 비교를 위해 콘솔에서의 실행을 캡쳐한 것입니다.

    > t1 = {}
    > t1[1] = 10
    > t1[3] = 30
    > t1[2] = 20
    > t1[4] = 40
    > t1[9] = 90
    > t1[6] = 60
    > table.foreach(t1, print)
    1       10
    2       20
    3       30
    4       40
    6       60
    9       90
    > table.foreachi(t1, print)
    1       10
    2       20
    3       30
    4       40


  • + Recent posts