Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

LUA 4

From ZeroWiki
Revision as of 15:28, 26 February 2012 by imported>fnwinter
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
  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=" 과 같이 결과를 반환합니다.

  1. 변수 범위

함수는 사용하기에 따라 변형할 수 있는게 많아서 천천히 다양한 방법을 설명하겠습니다. 대신 변수의 범위(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 이 없이 변수를 선언한다면 함수 밖에서도 값을 참조/변경 할 수 있습니다.

  1. 마무리

변수 범위는 이 밖에도 다양한 이슈를 만들 수 있습니다. 예를 들면 do ~ end 문에서도 local 로 범위를 한정할 수 있고 function 자체도 변수와 같이 범위(scope)를 한정하여 사용할 수 있습니다. 또한 local을 사용하지 않으면 전역 범위 내에서 변수나 함수 자체를 접근/변경할 수 있습니다.