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