1. 함수 오늘은 함수에 대해서 알아보겠습니다. 루아에서 함수도 하나의 객체(?)입니다. >function foo() >>print("foo!!") >>end >foo() foo!! >a = foo -- a라는 이름으로 foo를 넘겨준다. >a() -- 그러면 a 도 함수가 된다. foo!! >print(type(a)) -- a의 type을 알 수 있다. function 이처럼 간단하게 foo라는 함수를 만들어 봤습니다. [ function 함수명() end ] 형태로 함수를 만들 수 있습니다. 이제 매개변수를 넘겨서 반환값을 받는 함수를 만들어 보겠습니다. > function sum(a,b) >> return a+b >> end > print ("a+b=",sum(1,2)) a+b= 3 sum은 a,b 라는 매개 변수를 받아 a+b 연산을 한 후 반환해 주는 함수 입니다. 이제 좀 특이한 루아만의 가변 매개변 수, 복수 반환 함수를 만들어 볼까요? > function sum(...) -- 가변 매개변수를 받는다. >> local sum = 0 >> for i = 1, #arg do sum = sum + arg[i] end >> return "sum=", sum >> end > print ( sum(1,2,3,4,5) ) sum= 5 (...) 매개변수를 받으면 arg라는 테이블에 #arg 개 만큼 받을 수 있습니다. 그럼 for 문을 돌면서 sum을 계산해서 "sum=" 과 같이 결과를 반환합니다. 2. 변수 범위 함수는 사용하기에 따라 변형할 수 있는게 많아서 천천히 다양한 방법을 설명하겠습니다. 대신 변수의 범위(scope)에 대해서 간단하게 예제로 살펴 보겠습니다. > outside = 1 > function scope() >> local inside = 2 -- inside는 local 에서만 쓸 수 있도록 선언한다. >> print (inside) >> end > scope() 2 > print(outside) -- outside 는 존재 해도 ... 1 > print(inside) -- inside는 존재하지 않는다. nil 반환 nil 같은 주제로 다른 예를 보겠습니다. > function scope1() >> local inside = 1 >> function scope2() >> print (inside) -- 상위 함수의 local 변수에 접근 할 수 있습니다. >> end >> scope2() >> end > scope1() 1 local 이 없이 변수를 선언한다면 함수 밖에서도 값을 참조/변경 할 수 있습니다. 3. 마무리 변수 범위는 이 밖에도 다양한 이슈를 만들 수 있습니다. 예를 들면 do ~ end 문에서도 local 로 범위를 한정할 수 있고 function 자체도 변수와 같이 범위(scope)를 한정하여 사용할 수 있습니다. 또한 local을 사용하지 않으면 전역 범위 내에서 변수나 함수 자체를 접근/변경할 수 있습니다.