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 문과 매우 흡사하며 필자는 플래시의 스크립트에서도 겪어봤다...
솔직히 전 이론이 부실합니다... 호출스택이 어쩌고 저쩌고... 말 할 능력이 안됨을 용서하십시오 ㅠ_ㅠ
- 서적에 설명된 내용을 대신 합니다..
함수 호출들이 꼬리에 꼬리를 물고 있는 상황이라도 루아의 스택이 넘치는 일을 방지할 수 있다는 점에서 유용하다
함수 호출 시 루아는 호출에 관련된 값들과 변수들을 '스택'에 쌓는다.
그 값들은 호출이 끝나면 다시 스택에서 뽑혀지다.
그런데 함수 안에서 또 다른 함수를 호출하는 '호출 연쇄'가 길게 이어지면,
크기가 제한된 스택이 꽉 차서 루아 인터프리터가 죽는 일이 발생하다.
그러나 앞서 언급한 특징을 이용하면 그런 일을 피할 수 있다.