E D R , A S I H C RSS

LUA_4

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 + argi 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을 사용하지 않으면 전역 범위 내에서 변수나 함수 자체를 접근/변경할 수 있습니다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:37
Processing time 0.0167 sec