LUA 예제

1. 더하기 연산 (add)
기호 : +

예제
op1 = 444
op2 = 555
function add_event(op1, op2)
 local o1, o2 = tonumber(op1), tonumber(op2)
 if o1 and o2 then
  return o1+o2
 else
  local h = getbinhandler(op1, op2, "__add")
  if h then
   return (h(op1,op2))
  else
   error()
  end
 end
 end
print(op1,op2)

결과
444          555

2. 빼기 연산(sub)

기호 : -

예제

function unm_event(op)
 local o = tonumber(op)
 if o then
  return -o
 else
  local h = metatable(op).__unm
  if h then
   return (h(op))
  else
   error()
  end
 end
end


결과
???

3. 이어붙이기 연산(concat)

기호 : .. (마침표 두개)

function concat_event(op1, op2)
 if(type(op1) == "string" or type(op1) == "number") and
  (type(op2) == "string" or type(op2) == "number") then
 return op1 .. op2
 else
  local h = getbinhandler(op1, op2, "__concat")
  if h then
   return (h(op1,op2))
  else
   error("aaa")
  end
 end
end




4. 코루틴(coroutine) -> 협동스레드

두 개의 루틴이 돌아갈 때, 하나의 루틴을 일시 중지 한 후 다른 루틴을 실행하다가 다시 원래 루틴으로 돌아오면, 일시 중지한 시점부터 재시작 할 수 있다.

예제
function foo(a)
 print("foo", a)
 return coroutine.yield(2*a)
end
co = coroutine.create(function (a,b)
 print("co-body",a,b)
 local r=foo(a+1)
 print("co-body",r)
 local r, s=coroutine.yield(a+b, a-b)
 print("co-body", r, s)
 return b, "end"
end)
print("main", coroutine.resume(co,1,10))
print("main", coroutine.resume(co, "r"))
print("main", coroutine.resume(co, "x","y"))
print("main", coroutine.resume(co, "x","y"))

결과
co-body 1 10
foo 2
main true 4
co-body r
main true 11 -9
co-body x y
main true 10 end
main false cannot resume dead coroutine
LUA 예제 LUA 예제 Reviewed by kukanuc on 1월 27, 2019 Rating: 5

댓글 없음:

Powered by Blogger.