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
예제
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
예제
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
기호 : +
예제
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 예제
Reviewed by kukanuc
on
1월 27, 2019
Rating:
댓글 없음: