E D R S I H C RSS
ID
Password
Join
우리는 ìžëª…종 ì†Œë¦¬ì— ì˜í•´ì„œê°€ ì•„ë‹ˆë¼ ìƒˆë²½ì—ì˜ ë¬´í•œí•œ 기대ê°ìœ¼ë¡œ 깨어나는 ë²•ì„ ìµí˜€ì•¼ 하고 ë˜í•œ 스스로 늘 깨어 있어야만 한다. ―헨리 ë°ì´ë¹„드 ë„로(美 작가)



Contents

1 루아(lua)란?
2 ë°ì´íƒ€ 타입
3 변수
3.1 숫ìž
3.1.1 ìˆ«ìž -> 문ìžì—´ 변환
3.2 문ìžì—´
3.2.1 문ìžì—´ 제어 함수들
3.2.1.1 string.byte (s, [, i])
3.2.1.2 string.char (i1, i2, ...)
3.2.1.3 string.find (s, pattern [, init [, plain]])
3.2.1.4 string.len (s)
3.2.1.5 string.lower(s)
3.2.1.6 string.rep (s, n)
3.2.1.7 string.sub (s, i [, j])
3.2.1.8 string.upper(s)
3.2.1.9 string.format(formatstring, e1, e2, ...)
3.2.1.10 string.gfind (s, pat)
3.2.1.11 string.gsub (s, pat, repl [, n])
4 í…Œì´ë¸”
4.1 í…Œì´ë¸” 관련 함수들
4.1.1 table.foreach(í…Œì´ë¸”, 함수)
4.1.2 table.foreachi(í…Œì´ë¸”, 함수)
5 함수
5.1 í…Œì´ë¸” ì•ˆì— í•¨ìˆ˜ 내장하기 : 메소드
6 제어문
6.1 조건문과 true/false
6.2 if 문
6.3 while 문
6.4 repeat 문
6.5 for 문
6.5.1 ì¼ë°˜ì ì¸ 사용법
6.5.2 generic 반복문
6.6 íŒ ëª¨ìŒ
7 기타 추가 함수들
7.1 기본 함수들
7.1.1 메모리 관리
7.1.1.1 gcinfo()
7.1.1.2 collectgarbage()
7.2 수학 관련
7.3 (í™”ì¼) 입출력
7.3.1 핸들 ìƒì„± 함수들
7.3.1.1 io.open (filename, mode)
7.3.1.2 io.tmpfile()
7.3.2 핸들 사용 함수들
7.3.2.1 fh:close()
7.3.2.2 fh:flush()
7.3.2.3 fh:read(í¬ë§·ë¬¸ìžì—´, ...)
7.3.2.4 fh:seek (whence [, offset])
7.3.2.5 fh:write (value1, ...)
7.4 디버깅 관련
7.5 ìš´ì˜ì²´ê³„ 관련

1 루아(lua)란? #

ì›ëž˜ëŠ” C/C++ í”„ë¡œê·¸ëž¨ì— ë‚´ìž¥ë˜ì–´ì„œ 실행ë˜ëŠ” "기ìƒì ì¸" 스í¬ë¦½íЏ 엔진입니다만, 현재 pixels 팀ì—서 ê°œë°œì¤‘ì¸ PAGE(Pixelz Accessible Game Engine) 엔진ì—서는 마치 ë””ë ‰í„°ì˜ ë§ê³ ì–¸ì–´ì™€ ê°™ì´ ê²Œìž„ ë‚´ë¶€ ë¡œì§ ë° íë¦„ì„ ê¸°ìˆ í•˜ëŠ” 스í¬ë¦½íЏ 언어로서 사용ë˜ê³  있습니다. íŠ¹ì§•ì€ ë‹¤ìŒê³¼ 같습니다.
  • C/C++ì˜ ì½”ë“œë¥¼ ì´ì‹í•˜ê¸° 쉽다. ì´ê²ƒì€ 엔진작업/스í¬ë¦½íЏ(게임제작)ìž‘ì—…ì˜ ë¶„ì—…í™”ë¥¼ 가능하게 í•´ì¤ë‹ˆë‹¤. (물론, 반대로 루아 코드를 C/C++ìƒì—서 실행하는 ê²ƒë„ ê°€ëŠ¥í•˜ë‹¤.)
  • ë™ì¢… 스í¬ë¦½íЏ 언어 중ì—서는 ìµœê°•ì˜ ì†ë„와 íš¨ìœ¨ì„ ìžëž‘한다.
  • tableì´ë¼ëŠ” 강력한 ì—°ê´€ë°°ì—´ì„ ì§€ì›í•©ë‹ˆë‹¤. ì´ê²ƒì€ 스í¬ë¦½íЏ 제작시 ìžë£Œì˜ 정리를 ìƒë‹¹ížˆ ìš©ì´í•˜ê²Œ í•´ì¤ë‹ˆë‹¤.
  • ë¬¸ë²•ì´ ê°„ë‹¨í•©ë‹ˆë‹¤. ë°ì´íƒ€ íƒ€ìž…ì´ ì¡´ìž¬í•˜ì§€ë§Œ 사용시ì—는 숫ìž, 문ìžì—´ ì •ë„ë§Œ 구분하면 ë˜ë©° 왠만한 경우는 ìžë™ìœ¼ë¡œ ë³€í™˜ì„ ìˆ˜í–‰í•œë‹¤.
ë°˜ë©´ì— ë‹¤ìŒê³¼ ê°™ì€ ë‹¨ì ë„ 존재합니다.
  • 스í¬ë¦½íЏ 언어ë¼ë©´ 모ë‘ê°€ 가지고 있는 개비지 ì½œë ‰ì…˜ì´ ì¡´ìž¬í•©ë‹ˆë‹¤. 즉, 사용ë˜ì§€ 않는 메모리는 ì¼ì •ì •ë„ ì°¨ê²Œ ë˜ë©´ ìžë™ìœ¼ë¡œ 해제해버립니다. (ì´ê²ƒì€ 성능저하, ì§ì ‘ì ì¸ 메모리 ê´€ë¦¬ì˜ ì–´ë ¤ì›€ë“±ì˜ ë‹¨ì ì„ 만듭니다) 다행히, 루아 5.0ì´í›„버젼ì—서는 ì´ ê°œë¹„ì§€ 컬렉션 ì²˜ë¦¬ì˜ í•œë„를 ì¡°ì •í•  수 있어 ì´ í˜„ìƒì„ ì¼ì–´ë‚˜ì§€ 않ë„ë¡ ë§Œë“¤ 수 있습니다.
    • PAGEì—서는 ê°€ê¸‰ì  ëŒ€ìš©ëŸ‰ì˜ ë©”ëª¨ë¦¬ë¥¼ 사용하는 경우(예를 들면, 비트맵 ë°ì´íƒ€ 로딩)는 ëª¨ë‘ C/C++ 쪽으로 빼버렸습니다. 즉, 메모리 사용한ë„는 루아ìƒì—서 선언한 변수들만 고려하면 ë©ë‹ˆë‹¤. (메모리 관리 참조)
  • 간단하고 심플한 대신, ì§€ì›ë˜ëŠ” 함수가 ì •ë§ë¡œ 기본ì ì¸ ê²ƒë°–ì— ì—†ìŠµë‹ˆë‹¤.

2 ë°ì´íƒ€ 타입 #

  • 루아는 다ìŒê³¼ ê°™ì€ 6가지 ë°ì´íƒ€ íƒ€ìž…ì´ ìžˆìŠµë‹ˆë‹¤.
    1. nil : ì•„ë¬´ê²ƒë„ ì•„ë‹Œ 텅빈 ê°’ì„ ì˜ë¯¸í•©ë‹ˆë‹¤. ì¼ë°˜ì ìœ¼ë¡œ 변수를 초기화할때 사용합니다.
    2. number : 0, 3.1415927 ê³¼ ê°™ì€ ì‚¬ì¹™ì—°ì‚°ì´ ê°€ëŠ¥í•œ 모든 숫ìžê°’ì„ ì˜ë¯¸í•©ë‹ˆë‹¤.
    3. string : ë§ê·¸ëŒ€ë¡œ 문ìžì—´ìž…니다. ë£¨ì•„ì˜ ê¸°ë³¸íƒ€ìž…ì´ë©°, 스í¬ë¦½íЏìƒì—서는 " 문ìžë¡œ 둘러싸 지정합니다. (예: "1234", "redpixel1111")
    4. userdata : C/C++ê³¼ì˜ êµë¥˜ë¥¼ 위해 존재하는 타입입니다. PAGEë‚´ì—서는 핸들ì´ë¼ê³  지정하는 ê²ƒë“¤ì´ ë°”ë¡œ ì´ íƒ€ìž…ìž…ë‹ˆë‹¤. 스í¬ë¦½íŠ¸ë¥¼ 작성할때 ì§ì ‘ ê°’ì„ ì œì–´í•  경우는 드물고 보통 엔진ì—서 제공ë˜ëŠ” 함수를 통해서 설정하고 변경, 해제하게 ë©ë‹ˆë‹¤.
    5. function : 루아ì—서는 í•¨ìˆ˜ë„ í•˜ë‚˜ì˜ ê°’ìœ¼ë¡œ 취급합니다. 즉, function으로 ì„ ì–¸ë˜ë©´ ì‹¤í–‰ë„ ë˜ì§€ë§Œ function íƒ€ìž…ì˜ ë³€ìˆ˜ì— ëŒ€ìž…ë„ ê°€ëŠ¥í•©ë‹ˆë‹¤. (tableê³¼ 연합하여 사용하면 매우 강력해집니다)
    6. table : 루아ì—서 제공하는 ìµœê°•ì˜ ë²”ìš© ìžë£Œêµ¬ì¡° 타입입니다. 다른 타입으로 ë³€í™˜ì´ ë¶ˆê°€ëŠ¥í•˜ë©°, 조금 ì‚¬ìš©ë²•ì´ ë³µìž¡í•©ë‹ˆë‹¤. (차후 설명)

3 변수 #

  • 루아ì—서 변수란 "ì–´ë–¤ ê°’ì„ ë‹´ê³  있는 ê²ƒì˜ ëª…ì¹­"으로 ì •ì˜í•©ë‹ˆë‹¤. 즉, 앞서 설명한 ë°ì´íƒ€ íƒ€ìž…ì˜ ê°’ì€ ëª¨ë‘ ë³€ìˆ˜ì— ì €ìž¥ë©ë‹ˆë‹¤.
  • 루아ì—서는 다중 ëŒ€ìž…ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.
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ê³¼ ë™ì¼

3.1 ìˆ«ìž #

  • ë‹¤ìŒ ì˜ˆì œì™€ ê°™ì€ ì—°ì‚°ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.
a = 10 + 4 -- ë§ì…ˆ
b = 5 * 5 -- 곱셈
c = 10 - 40.4 -- 뺄셈
d = 55 / 5.3 -- 나눗셈
e = 10 ^ 3 -- 거듭제곱. 결과는 1000.
  • 참고 : 나머지는 math ê°ì²´ì˜ mod() 함수를 사용해서 구할 수 있습니다. (math ë¼ì´ë¸ŒëŸ¬ë¦¬ 참조)

3.1.1 ìˆ«ìž -> 문ìžì—´ 변환 #


3.2 문ìžì—´ #

  • 루아ì—ì„œì˜ ë¬¸ìžì—´ë‚´ì—서 글ìžì— 대한 ì¸ë±ì‹±ì€ 1부터 시작합니다. (C언어와 ê°™ì´ 0ì´ ì•„ë‹ˆë‹¤. 헛갈리지 ë§ ê²ƒ.)
  • ìŒìˆ˜ ì¸ë±ì‹±ë„ 허용하는ë°, ì´ë•Œì—는 문ìžì—´ì˜ 맨 ëì—서부터 역으로 ì¸ë±ì‹±ì„ 하게 ë©ë‹ˆë‹¤. (예를 들면, -1ì€ ë¬¸ìžì—´ì˜ 맨 마지막 문ìžë¥¼ 나타냅니다.)
  • ë‘ê°œì˜ ë¬¸ìžì—´ì˜ ë³‘í•©ì€ ".." ì—°ì‚°ìžë¥¼ 사용합니다. 다ìŒì€ ë‘ê°œì˜ ë¬¸ìžì—´ì„ í•©ì³ ì¶œë ¥í•˜ëŠ” 예입니다.
a = "whitepixel"
b = "바보"
c = a..b
print(c) -- "whitepixel바보"ê°€ 출력ëœë‹¤

3.2.1 문ìžì—´ 제어 함수들 #

  • ì´ ë¼ì´ë¸ŒëŸ¬ë¦¬ëŠ” 문ìžì—´ê´€ë¦¬ë¥¼ 위한 검색, 부분 문ìžì—´ì˜ 추출, 패턴 ëŒ€ìž…ë“±ë“±ì„ ì§€ì›í•˜ëŠ” ì¼ë°˜ í•¨ìˆ˜ë“¤ì„ ì œê³µí•œë‹¤.
  • 문ìžì—´ ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ 모든 함수는 í…Œì´ë¸” stringë‚´ì— ëª¨ë‘ ë‹´ê²¨ìžˆë‹¤.

3.2.1.1 string.byte (s, [, i]) #

  • 문ìžì—´ sì˜ i번째 문ìžì˜ ë‚´ë¶€ 숫ìžë¡œ 표현ëœ(예를 들면, 아스키 코드) 코드를 반환한다. ë§Œì¼ i를 지정하지 않으면 1로 간주ëœë‹¤. i는 물론 ìŒìˆ˜ë¡œ ì§€ì •ë  ìˆ˜ 있다.

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

  • 0 ì´ìƒì˜ ì •ìˆ˜ë§Œì„ ì¸ìžë¡œ 받는다. ê°ê°ì˜ 숫ìžê°€ 나타내는 ì½”ë“œì— í•´ë‹¹ë˜ëŠ” 문ìžë¥¼ 반환한다.

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

  • 문ìžì—´ së‚´ì—서 patternì— ê°€ìž¥ 첫번째로 맞는 ë¶€ë¶„ì„ ì°¾ì•„ 반환한다. 만약 한개를 찾았다면 find()함수는 ì¼ì¹˜ì ì˜ 시작과 ëì„ ë‚˜íƒ€ë‚´ëŠ” sì˜ ì¸ë±ìŠ¤ë“¤ë¥¼ 반환한다. 찾지 못하면 nilì„ ë°˜í™˜í•œë‹¤.
  • 만약 pattern 문ìžì—´ë‚´ì— "캡ì³"ì˜µì…˜ì´ ì§€ì •ë˜ì–´ 있다면(string.gsub 참조), 캡ì³ëœ 문ìžì—´ë“¤ë„ ë°˜í™˜ê°’ì— í¬í•¨ë˜ì–´ 반환ëœë‹¤.
  • init ì¸ìžëŠ” 어디서부터 ê²€ìƒ‰ì„ ì‹œìž‘í•  것ì¸ì§€ì— 대한 s 문ìžì—´ë‚´ì˜ ì¸ë±ìŠ¤ë¥¼ 지정한다. 지정하지 않으면 1로 간주ë˜ë©°, ìŒìˆ˜ì§€ì •ë„ ê°€ëŠ¥í•˜ë‹¤.
  • plain ì¸ìžì˜ ê°’ì„ true로 놓으면 패턴 매칭 ê¸°ëŠ¥ì„ ë„는 효과가 있다. ì´ê²ƒì€ 아주 í‰ë²”한(plain) 부분 문ìžì—´ì„ 검색하는 ëª…ë ¹ì´ ë˜ë©°, pattern ì¸ìžë‚´ì— 들어있는 ê°’ë“¤ì€ ë¬´ì‹œëœë‹¤. ë§Œì¼ plain ì¸ìžë¥¼ true로 지정하면 initë„ ë°˜ë“œì‹œ 지정해야 한다는 ì ì— 주ì˜í•´ë¼. plainì€ ì§€ì •í•˜ì§€ 않으면 당연히 false로 간주ëœë‹¤.

3.2.1.4 string.len (s) #

  • 문ìžì—´ì˜ 길ì´ë¥¼ 반환한다. ""(빈 문ìžì—´)ì€ 0ì„ ë°˜í™˜í•œë‹¤. ì²¨ë¶€ëœ 0ê°’ë„ ê°¯ìˆ˜ì— í¬í•¨ëœë‹¤. 그러므로 예를 들면 "a\000b\000c"ì˜ ê¸¸ì´ëŠ” 5ê°€ ëœë‹¤.

3.2.1.5 string.lower(s) #

  • 주어진 문ìžì—´ì„ ëª¨ë‘ ì†Œë¬¸ìžë¡œ 바꾸고 ê·¸ ê²°ê³¼ 문ìžì—´ì˜ ë³µì‚¬ë³¸ì„ ë°˜í™˜í•œë‹¤. (ì›ë³¸ì€ 바뀌지 않는다.) 대소문ìžì— 대한 êµ¬ë¶„ì€ í˜„ìž¬ ë¡œì¼€ì¼ ì„¤ì •ì„ ë”°ë¥¸ë‹¤.

3.2.1.6 string.rep (s, n) #

  • 문ìžì—´ s를 n번 반복하여 ëª¨ë‘ ë³‘í•©í•œ ê°’ì„ ë°˜í™˜í•œë‹¤.

3.2.1.7 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ê¸¸ì´ ë§Œí¼ì˜ 접미어를 때내는 효과가 있다.

3.2.1.8 string.upper(s) #

  • 문ìžì—´ ë‚´ì˜ ëª¨ë“  소문ìžë“¤ì„ 대문ìžë¡œ 바꾼 결과를 반환한다. 대소문ìžì— 대한 êµ¬ë¶„ì€ í˜„ìž¬ ë¡œì¼€ì¼ ì„¤ì •ì„ ë”°ë¥¸ë‹¤.

3.2.1.9 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
      string.format('%q', 'a string with "quotes" and \n new line')
      
      will produce the string:
    • "a string with \"quotes\" and \
      newline"
      
    • 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' ê°’ì„ í¬í•¨í•  수 없다.

3.2.1.10 string.gfind (s, pat) #

3.2.1.11 string.gsub (s, pat, repl [, n]) #

replì— ì˜í•´ì„œ

4 í…Œì´ë¸” #

다ìŒì˜ ì˜ˆë¬¸ì€ "temp" ë¼ëŠ” tableì— ì°¨ë¡€ë¡œ "a","b","c"ë¼ëŠ” ê°’ì„ ì„¤ì •í•˜ëŠ” 것입니다.
temp = {"a","b","c"}
ìœ„ì˜ ì˜ˆë¬¸ì˜ í…Œì´ë¸”ì—서 ê°’ì„ ê°€ì ¸ì˜¤ë ¤ë©´. []를 사용하시면 ë©ë‹ˆë‹¤.

다ìŒì˜ ì˜ˆë¬¸ì€ ìœ„ì—서 작성한 "temp"ì—서 첫번째 ê°’ì„ ê°€ì ¸ì˜¤ëŠ”ê²ë‹ˆë‹¤.
print(temp[1])

ê²°ê³¼: a

4.1 í…Œì´ë¸” 관련 함수들 #

4.1.1 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

4.1.2 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

5 함수 #

  • 함수는 ì¼ì •한 실행단위를 ì–´ëŠ ìˆœê°„ì— í•œêº¼ë²ˆì— ì‹¤í–‰í•˜ê¸° 위해 í•˜ë‚˜ì˜ ê°’ìœ¼ë¡œ ì„ ì–¸í•´ë†“ì€ ê²ƒìž…ë‹ˆë‹¤. 즉, í•¨ìˆ˜ê°’ì„ ê°€ì§€ëŠ” 변수는 ê·¸ ìžì²´ë¡œ ì‹¤í–‰ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.
  • 루아는 ê°’ì„ ì—¬ëŸ¬ê°œ returní•  수 있습니다. (예를 들면, a, b, c = func(d) ì´ëŸ° ê²ƒì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.)
  • 기본 ë¬¸ë²•ì€ ë‹¤ìŒê³¼ 같습니다. ([] 표시는 안ì ì–´ë„ ë¬¸ë²•ì— ë§žë‹¤ëŠ” ì˜ë¯¸ìž…니다. 즉, ì¸ìž1, ì¸ìž2...는 í•¨ìˆ˜ì„±ê²©ì— ë”°ë¼ ì ì–´ë„ë˜ê³  안ì ì–´ë„ ë©ë‹ˆë‹¤.)
function 함수명 ([ì¸ìž1, ì¸ìž2, ...])
...
end
  • 다ìŒì€ ì¸ìžë¡œ ë„˜ê²¨ë°›ì€ ë¬¸ìžì—´ì„ "바보"를 ëì— ë¶™ì—¬ì„œ 출력하는 함수입니다.
function foolprint (i)
  local tmp = i.."바보"
  print(tmp)
end
  • 함수를 사용하는 ê²ƒì€ ë‹¤ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤.
foolprint("redpixel") -- "redpixel바보"ë¼ê³  출력ë©ë‹ˆë‹¤
  • 함수는 ë°˜í™˜ê°’ì„ ê°€ì§ˆ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ë•Œì—는 í•¨ìˆ˜ë‚´ì— returnì´ë¼ê³  하는 키워드를 사용합니다. 물론, 루아 íŠ¹ì„±ìƒ ì—¬ëŸ¬ê°œì˜ ê°’ì„ ë°˜í™˜í•  수 있습니다.
  • 다ìŒì€ ë‘ê°œì˜ ì¸ìžë¥¼ 받아서 ë”한 결과와 곱한 결과를 ê°ê° 반환하는 í•¨ìˆ˜ì˜ ì˜ˆìž…ë‹ˆë‹¤.
function calc1(x, y)
  local a = x + y
  local m = x * y
  return a, m
end
  • 위 함수는 다ìŒê³¼ ê°™ì´ ì‚¬ìš©ë  ìˆ˜ 있겠죠.
a, b = calc1(10, 10)
print(a, b) -- "20   100"ì´ë¼ê³  출력ë©ë‹ˆë‹¤.

5.1 í…Œì´ë¸” ì•ˆì— í•¨ìˆ˜ 내장하기 : 메소드 #


6 제어문 #

6.1 조건문과 true/false #

ì¡°ê±´ë¬¸ì€ ë¬¸ìž¥ì˜ ê²°ê³¼ë¡œì„œ ì°¸/거짓중 í•˜ë‚˜ì˜ ê°’ë§Œì„ ì˜ë¯¸í•˜ëŠ” ë¬¸ìž¥ì„ ì˜ë¯¸í•©ë‹ˆë‹¤. 여기ì—는 몇가지 ì—°ì‚°ìžê°€ 비êµìˆ˜ë‹¨ìœ¼ë¡œ 사용ë©ë‹ˆë‹¤.
  • == : ë™ì¼ë¹„êµ.
  • ~= : 다름비êµ. (위와 반대)
  • >=, <=, >, < : í¬ê¸°ë¹„êµ.
  • not : 부정. true는 false로, false는 true로.
  • and : "그리고"ì˜ ì˜ë¯¸. ë‘ê°œì˜ ì¡°ê±´ë¬¸ì´ ëª¨ë‘ true여야 true로 처리.
  • or : "ë˜ëŠ”"ì˜ ì˜ë¯¸. ë‘ê°œì˜ ì¡°ê±´ë¬¸ì´ ëª¨ë‘ false여야 false로 처리.
  • true : í•­ìƒ ì°¸.
  • false : í•­ìƒ ê±°ì§“.

6.2 if 문 #

  • 기본 ifë¬¸ì€ ë‹¤ìŒê³¼ 같다.
if i ~= 0 then
  print("0ì´ ì•„ë‹ˆìžë‚˜!")
end
  • 물론, ì•„ë‹ ê²½ìš°ë„ ì²¨ë¶€í•  수 있다. ì´ë•Œì—는 else를 사용한다. (elseìœ„ì— end를 ì“°ì§€ 않는 ê²ƒì— ì£¼ì˜í•œë‹¤. end는 맨 ë§ˆì§€ë§‰ì— í•œë²ˆë§Œ ì ìœ¼ë©´ ëœë‹¤.
if i == 0 then   -- i가 0과 같으면
  print("0ì´êµ°.")
else
  print("0아님.")
end
  • ì•„ë‹ê²½ìš° í•œë²ˆë” ê²€ì‚¬ë¥¼ 하고 싶으면 elseif를 사용한다. 역시 가장 마지막ì—ë§Œ end를 쓴다는 ê²ƒì— ì£¼ì˜.
if i == 1 then   -- i가 1과 같으면
  print("1ì´êµ°.")
elseif i == 0 then  -- 그렇지 않고 i가 0과 같으면
  print("0ì´ë„¤~")
else
  print("0ë„ 1ë„ ì•„ë‹ˆë„¤~")
end

6.3 while 문 #

  • 기본 ë¬¸ë²•ì€ ë‹¤ìŒê³¼ 같다. ì´ ëª…ë ¹ì˜ ì˜ë¯¸ëŠ” "지정한 ì¡°ê±´ì´ trueê°’ì„ ë°˜í™˜í•  ë™ì•ˆ 반복ì ìœ¼ë¡œ 실행한다"는 뜻ì´ë‹¤.
while 조건문 do
....
end
  • 예를 들면, 다ìŒì˜ ë¬¸ìž¥ì€ "!"를 100회 출력한다.
i = 0
while i ~= 100 do  -- iê°€ 100ì´ ì•„ë‹ë™ì•ˆ 반복한다
  print("!")
  i = i + 1
end

6.4 repeat 문 #

  • 기본 ë¬¸ë²•ì€ ë‹¤ìŒê³¼ 같다. ì´ ëª…ë ¹ì˜ ì˜ë¯¸ëŠ” "지정한 ì¡°ê±´ì´ trueê°€ ë ë•Œê¹Œì§€ 반복ì ìœ¼ë¡œ 실행한다"는 뜻ì´ë‹¤. (즉, 위 while문과는 ë°˜ëŒ€ì˜ ì˜ë¯¸ì´ë‹¤!)
repeat
....
until 조건문
  • 예를 들면, 다ìŒì˜ ë¬¸ìž¥ì€ "redpixel"ì„ 50회 출력한다.
i = 50
repeat
  print("redpixel")
  i = i - 1
until i == 0    -- iê°€ 0ì´ ë ë•Œê¹Œì§€ 반복한다

6.5 for 문 #

6.5.1 ì¼ë°˜ì ì¸ 사용법 #

  • 다른 ì–¸ì–´ì™€ì˜ ë§ˆì°¬ê°€ì§€ë¡œ ì§€ì •ëœ ë²”ìœ„ë¥¼ 지정함으로서 ë°˜ë³µëª…ë ¹ì„ ìˆ˜í–‰í•˜ëŠ” ê²ƒì´ for명령ì´ë‹¤. 기본 ë¬¸ë²•ì€ ë‹¤ìŒê³¼ 같다.


6.5.2 generic 반복문 #


6.6 íŒ ëª¨ìŒ #


7 기타 추가 함수들 #


7.1 기본 함수들 #


7.1.1 메모리 관리 #

7.1.1.1 gcinfo() #

  • 현재 ë£¨ì•„ë‚´ì˜ ì „ì²´ 메모리 사용ìƒíƒœë¥¼ 반환합니다. 첫번째 ê°’ì€ ì ìœ ìš©ëŸ‰ì´ê³ , ë‘번째 ê°’ì€ ë£¨ì•„ë‚´ì— í• ë‹¹ëœ ì¢… 허용용량입니다. 단위는 KByte입니다.
  • ì¸ìžëŠ” 없습니다.
  • print(gcinfo())를 í•´ë³´ë©´ 쉽게 결과를 ë³¼ 수 있습니다.

7.1.1.2 collectgarbage() #

  • 루아가 메모리 정리를 하는 한계메모리 ì‚¬ìš©ëŸ‰ì„ ì •ì˜í•©ë‹ˆë‹¤. (gcinfo()ì—서 ë‘번째 ê°’ì„ ë§í•©ë‹ˆë‹¤)
  • ì´ê²ƒì´ ë„“ì„ìˆ˜ë¡ ìžë™ìœ¼ë¡œ 메모리 관리가 실행ë˜ëŠ” í™•ë¥ ì´ ì¤„ì–´ë“­ë‹ˆë‹¤.

7.2 수학 관련 #


7.3 (í™”ì¼) 입출력 #

7.3.1 핸들 ìƒì„± 함수들 #

7.3.1.1 io.open (filename, mode) #

í™”ì¼ì„ ì—´ê³  ê·¸ í™”ì¼ì— 해당하는 í™”ì¼ í•¸ë“¤ì„ ë°˜í™˜í•œë‹¤. ì—ëŸ¬ì¼ ê²½ìš°ì—는 nilì„ ë°˜í™˜í•œë‹¤. mode는 string 형으로 지정하며 ì˜µì…˜ì€ ë‹¤ìŒê³¼ 같다.
"r"ì½ê¸°ëª¨ë“œ
"w"쓰기모드
"a"첨부모드
"r+"갱신모드. ì½ê¸°ëª¨ë“œì§€ë§Œ ì´ì „ í™”ì¼ì€ ì‚­ì œ.
"w+"갱신모드. 쓰기모드지만 ì´ì „ í™”ì¼ì€ ì‚­ì œ.
"a+"첨부모드지만 í™”ì¼ì˜ ëì—서부터만 쓰기가 허용.

b문ìžë¥¼ mode 문ìžì—´ì˜ ëì— ì²¨ê°€í•˜ë©´ ì´ì§„í™”ì¼í˜•태로 열게 ëœë‹¤.

7.3.1.2 io.tmpfile() #

임시화ì¼ì„ ìƒì„±í•˜ê³  ê·¸ í™”ì¼ì— 대한 í•¸ë“¤ì„ ë°˜í™˜í•œë‹¤. 임시화ì¼ì€ 차후 í”„ë¡œê·¸ëž¨ì´ ì¢…ë£Œí•˜ë©´ ìžë™ìœ¼ë¡œ ì‚­ì œëœë‹¤.

7.3.2 핸들 사용 함수들 #

fh는 ìœ„ì˜ í•¸ë“¤ íšë“ í•¨ìˆ˜ë“¤ì˜ ë°˜í™˜ê°’ì¸ í™”ì¼ í•¸ë“¤ì„ ì˜ë¯¸í•œë‹¤.

7.3.2.1 fh:close() #

해당 í™”ì¼ì„ 닫는다.

7.3.2.2 fh:flush() #

현재 버í¼ì— 담겨있는 기ë¡ì¤‘ì¸ ë°ì´íƒ€ë¥¼ ëª¨ë‘ í™”ì¼ì— ì ìš©í•œë‹¤.

7.3.2.3 fh:read(í¬ë§·ë¬¸ìžì—´, ...) #

í™”ì¼ í•¸ë“¤ fh로부터 주어진 í¬ë§·ì— ë”°ë¼ ë°ì´íƒ€ë¥¼ ì½ì–´ë“¤ì—¬ ê·¸ ê°’ì„ ë°˜í™˜í•œë‹¤. í¬ë§·ë¬¸ìžì—´ì•ˆì— 들어가는 ëª…ë ¹ì€ ë‹¤ìŒê³¼ 같다.
"*n"숫ìžë¥¼ ì½ì–´ë“¤ì—¬ 반환한다. ì´ê²ƒì€ number 타입으로 반환하는 유ì¼í•œ í¬ë§·ì´ë‹¤.
"*a"현재 위치ì—서 나머지 ì „ì²´ ë‚´ìš©ì„ ì½ì–´ë“¤ì—¬ ê·¸ ë‚´ìš©ì„ ë°˜í™˜. í™”ì¼ì˜ ëì—서 ëª…ë ¹ì„ ì‹¤í–‰í•œê±°ë¼ë©´ nil반환.
"*l"ë‹¤ìŒ ì¤„ì„ ì½ì–´ë“¤ì¸ë‹¤.(EOF는 건너뛴다) í™”ì¼ì˜ ëì—서 ëª…ë ¹ì„ ì‹¤í–‰í•œê±°ë¼ë©´ nil반환. ì´ê²ƒì´ 기본 í¬ë§·ìž„.
숫ìžì£¼ì–´ì§„ 숫ìžë§Œí¼ì˜ 문ìžë¥¼ ì½ì–´ë“¤ì—¬ ê·¸ ë‚´ìš©ì„ ë°˜í™˜í•œë‹¤. 0ì„ ì§€ì •í•˜ë©´ ì•„ë¬´ê²ƒë„ ì½ì§€ì•Šê³  텅빈 문ìžì—´ì„ 반환한다. í™”ì¼ì˜ ëì—서 ëª…ë ¹ì„ ì‹¤í–‰í•œê±°ë¼ë©´ nil반환.

예제:
myfile = open("test.txt","r")
t1 = myfile:read(3) -- t1ì— 3글ìžë§Œí¼ 문ìžì—´ì„ ì½ì–´ì„œ 기ë¡(문ìžì—´)
n2 = myfile:read("*n") -- n1ì— ìˆ«ìžë¥¼ ì½ì–´ ê·¸ ê°’ì„ ê¸°ë¡(숫ìž)
t3 = myfile:read() -- í•œì¤„ì„ ëª¨ë‘ ì½ì–´ t3ì— ê¸°ë¡(문ìžì—´)

7.3.2.4 fh:seek (whence [, offset]) #

Sets and gets the file position, measured in bytes from the beginning of the file, to the position given by offset plus a base specified by the string whence, as follows:
“set†base is position 0 (beginning of the &#64257;le);
“cur†base is current position;
“end†base is end of &#64257;le;

In case of success, function seek returns the final file position, measured in bytes from the beginning of the file. If this function fails, it returns nil, plus a string describing the error. The default value for whence is "cur", and for offset is 0. Therefore, the call file:seek() returns the current file position, without changing it; the call file:seek("set") sets the position to the beginning of the file (and returns 0); and the call file:seek("end") sets the position to the end of the file, and returns its size.

7.3.2.5 fh:write (value1, ...) #

Writes the value of each of its arguments to the filehandle fh. The arguments must be strings or numbers. To write other values, use tostring or format before write. If this function fails, it returns nil, plus a string describing the error.

7.4 디버깅 관련 #


7.5 ìš´ì˜ì²´ê³„ 관련 #


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.6163 sec