블로그 이미지
GUCCI

카테고리

전체보기 (111)
여행 (1)
기기 (2)
쇼핑 (0)
게임 (0)
etc. (6)
취업이야기 (0)
업무일지 (5)
리눅스 (38)
웹프로그래밍 (2)
네트워크 (4)
JAVA (17)
Android (0)
IOS (2)
LUA (8)
C/C++ (1)
Objective C (2)
SERVER (2)
그누보드4 (1)
MSSQL (2)
Programming (1)
자바스크립트 (4)
HTML/CSS (1)
LGNAS (0)
Total
Today
Yesterday

Lua 02. 함수

LUA / 2012. 3. 5. 10:32

1. 함수가 왔다

 - 루아에서는 함수는 c 와 유사하면서도 다른 독특한 성격을 지녔다.

 - 무슨 말이 필요하랴.. 예제를 보자.

 

sample code1

 

function Swap()

    -- ...............

end

 

 

함수의 시작은 function  이며   은   end 이다.

 

 

 - 루아에서 함수는 단일 및 다중 파라메터를 지원한다.

 

function Swap( a )

function Swap( a, b, c, d )

 

 

 

 - 놀라운 사실이다!   가변인자를 지원한다..

 

sample code2

 

function Swap( ... )

     for  indx = 1, arg.n

     do

              arg[1]  -- .........................

     end

end

 

 

 

요점만 말하겠다..   arg.n  을 통하여 개수를 파악할 수 있다.

 

사용법은 배열처럼 (   arg[1]  )  사용하면 된다.

 

사용 예 )

    function Swap( a,  b,  ... )

 

 

 

 

 - Return  ★★★★☆

 

  루아의 함수도 반환값(return value)을 돌릴 수 있다.  그것도 여러개도 된다!!  이건 정말 멋진 기능이다~ 샘플부터 보자.

 

sample code3

 

function GetTime()

     TimeStr  = " 몹시 흥분 "

     return TimeStr

end

 

 

 

sample code4   -- made sample.lua

 

function WhereAreYouFrom()
       str1 = "허리도"
       str2 = "가늘군"
       str3 = "만지면"
       str4 = "부러지리"
   
       strTotal = string.format("%s %s %s %s", str1, str2, str3, str4 )
    
       return str1, str2, str3, str4, strTotal
end

 

print( WhereAreYouFrom() )

 

 

sample code5   -- made sample.lua

 

function WhereAreYouFrom()
   str1 = "허리도"
   str2 = "가늘군"
   str3 = "만지면"
   str4 = "부러지리"
   
   strTotal = string.format("%s %s %s %s", str1, str2, str3, str4 )
   
   return str1, str2, str3, str4, strTotal
end

 

a,b,c,d,e = WhereAreYouFrom()

print(a,b,c,d,e)

 

 

 

 

두 샘플 모두 결과는 같다.

 

루아의 return 은 c,c++ 에서 클래스 및 구조체 형태의 덩어리를 정의하고 그것을 리턴하는 방식 등의 번거로움을 한방에 깬다.

 

 

 

 

 아직 return 에 대하여 끝난것이 아니다... 샘플부터 보자 ..

 

sample code6   --  made by sample.lua

 

function Home()


      print("집입니다.. 아 오늘 하루 쉬고 싶당... 그래도 출근해야지..")
      return Company()


end

 

function Company()


     local NightDuty = 1
     print("회삽니다..  아 오늘도 욜라 정신없이 코딩중이다.. \n집에가서 와우하고싶당.. ㅠ_ㅠ")
 
     if NightDuty == 1 then
              return FullTimeMode()

     else 
               print("와~~~ 퇴근이다~~ 집에가서 와우하자~")
               return Home()
     end
 
    return print("섹시미녀와의 데이트")

end

 

function FullTimeMode()


 print("오늘도 야근모드입니다... 집에가서 와우하긴 다 틀렸습니다 ㅠ_ㅠ")


end

 

 

  c, c++ 에서 겪은 순차적인 프로그래밍과는 거리가 먼 방식임을 알 수 있다..

  이러한 구조는 c 에서 사용하던 goto 문과 매우 흡사하며 필자는 플래시의 스크립트에서도 겪어봤다...

 

  솔직히 전 이론이 부실합니다... 호출스택이 어쩌고 저쩌고... 말 할 능력이 안됨을 용서하십시오 ㅠ_ㅠ

 

  - 서적에 설명된 내용을 대신 합니다..

 

  함수 호출들이 꼬리에 꼬리를 물고 있는 상황이라도 루아의 스택이 넘치는 일을 방지할 수 있다는 점에서 유용하다

  함수 호출 시 루아는 호출에 관련된 값들과 변수들을 '스택'에 쌓는다.

  그 값들은 호출이 끝나면 다시 스택에서 뽑혀지다.

  그런데 함수 안에서 또 다른 함수를 호출하는 '호출 연쇄'가 길게 이어지면,

  크기가 제한된 스택이 꽉 차서 루아 인터프리터가 죽는 일이 발생하다.

  그러나 앞서 언급한 특징을 이용하면 그런 일을 피할 수 있다. 

'LUA' 카테고리의 다른 글

Lua 04. 문자열  (1) 2012.03.05
Lua 03. math  (3) 2012.03.05
Lua 01. 문법  (0) 2012.03.05
Luci Reference: Templates  (3) 2012.02.17
LUA IDE 환경  (4) 2012.02.16
Posted by GUCCI
, |

최근에 달린 댓글

글 보관함