2011-05-13 10 views
2

나는 아래와 같은 루아 클래스를 가지고있다. json을 사용하여 객체를 직렬화하고 키 값 저장소에 저장합니다. 개체를 serialize하고 키 값 저장소에 넣을 수는 있지만 키 값 저장소에서 개체를 검색 한 후에 개체의 메서드를 호출 할 수는 없습니다. json 모듈이 인코딩하는 동안 메서드를 건너 뛰고 내 객체가 디코딩 후 메서드를 갖지 않는다는 것을 이해합니다.json에서 디코딩 한 후에 메소드를 호출 할 수 없다.

json에서 lua로 객체를 디코딩 한 후 클래스에 메소드를 추가 할 수 있습니까? 어떤 것은 C 언어로 함수 포인터와 유사합니다.

local class_name = "user_object"; 
user_object = {}; --user class 


function user_object.new (mobile, password, uid) 

     local self = {}; 
     self.mobile = mobile; 
     self.uid = uid; -- generate a uid which is a running number. 
     self.password = password; 
     self.messages_sent = 0; 
     self.put_request_count = 0; 
     self.get_request_count = 0; 
     self.last_time_active = ""; 
     self.get_tickets = {}; 
     self.put_tickets = {}; 
     self.group_message_stream = {}; 
     self.group_ownerships = {}; -- group names which he is owner of 
     self.group_memberships = {}; -- group names which he is member of 
     self.sent_poke_count = 0; 
     self.sent_poke_stream = {}; 
     self.recv_poke_count = 0; 
     self.recv_poke_stream = {}; 

     function self:add_put_ticket(ticketid) 
       table.insert(self.put_tickets, ticketid); 
       self:incr_put_count(); 
       self:save(); 
       return; 
     end 

     function self:add_get_ticket(ticketid) 
       table.insert(self.get_tickets, ticketid); 
       self:incr_get_count(); 
       self:save(); 
       return; 
     end 

답변

2

루아의 함수는 1 차 객체이므로 함수에 변수를 저장할 수 있습니다. 라인

function self:add_put_ticket(ticketid) 

거기에서

self.add_put_ticket = function (self, ticketid) 

에 해당, 무엇을해야할지 명백해야한다 : 그들은 액세스 할 수 있습니다 원하는 방법을 정의하고 역 직렬화

후 해당 필드에 할당
2

당신은 메타 테이블에이 작업을 수행 할 수 있습니다.

user = { name = 'ponzao' } -- Just a table with values. 
User = {}     -- Table containing the functions. 
function User:allCapsName() return self.name:upper() end -- A method. 
setmetatable(user, {__index = User}) -- For unavailable keys all calls are dispatched to User. 
print(user:allCapsName()) --> "PONZAO" 
관련 문제