LUA 를 이용한 RPC
전산
2010/02/09 10:16
코드 :
-- 함수 호출 핸들러
function CALL_HANDLER( tbl, ... )
print( "function : " .. tbl.FUNC_NAME )
a = {...}
print( "args : " )
for i = 1, #a do
print( a[i] )
end
end
-- tbl 에 호출러를 바인딩
function Bind( tbl )
mt = {}
mt.__index = function( tbl, key )
-- 리턴할 함수 호출을 위한 임시객체
local tmp = {}
tmp.FUNC_NAME = key
-- 핸들러 바인딩
local inst = {}
inst.__call = CALL_HANDLER
setmetatable( tmp, inst )
return tmp
end
setmetatable( tbl, mt )
end
obj = {}
Bind( obj )
obj.aa( "a", 3, 5 )
실행결과 :
$ lua-5.1 call.lua function : aa args : a 3 5
CALL_HANDLER 에 장난을 쳐주면 RPC 로 동작할 수 있다. 확장시키면 리모트의 객체 참조 및 대입등도 가능한데 한번 해서 프로젝트에 적용해 보려다가 갑자기 이게 뭐하는 짓인가 싶어서 관둠.
메타프로그래밍이란건 일단 재밌는데다가 근사해 보이기도 하지만.. 사실은 제한적이고도 쓸데 없는, 사악한 것이 될 가능성이 큰 관계로 너무 빠져들지 않는게 좋다.







Textcube 1.8.5 : Accelerando