LUA 를 이용한 RPC

전산 2010/02/09 10:16
코드 : [CODE lua] -- 함수 호출 핸들러 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 ) [/CODE]

실행결과 : [CODE] $ lua-5.1 call.lua function : aa args : a 3 5 [/CODE]

CALL_HANDLER 에 장난을 쳐주면 RPC 로 동작할 수 있다. 확장시키면 리모트의 객체 참조 및 대입등도 가능한데 한번 해서 프로젝트에 적용해 보려다가 갑자기 이게 뭐하는 짓인가 싶어서 관둠.

메타프로그래밍이란건 일단 재밌는데다가 근사해 보이기도 하지만.. 사실은 제한적이고도 쓸데 없는, 사악한 것이 될 가능성이 큰 관계로 너무 빠져들지 않는게 좋다.
2010/02/09 10:16 2010/02/09 10:16

트랙백 주소 :: http://testors.net/tt/trackback/1242