从json解码后无法调用方法

从json解码后无法调用方法,json,lua,Json,Lua,我有一个像下面这样的Lua课程。我使用json序列化对象并将其放入键值存储中。我能够序列化对象并将其成功放入键值存储,但在从键值存储检索对象后,我无法调用该对象的任何方法。我知道json模块在编码时跳过方法,而我的对象在解码后没有方法 在我将对象从json解码为lua之后,有没有办法将方法附加到类中?一些类似于C语言中函数指针的东西 local class_name = "user_object"; user_object = {}; --user class function user

我有一个像下面这样的Lua课程。我使用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

您可以使用元表执行此操作

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"

Lua中的函数是第一类对象,可以将函数存储在任何变量中。线路

function self:add_put_ticket(ticketid)
相当于

self.add_put_ticket = function (self, ticketid)
从这里开始,应该清楚地知道该做什么:在可访问的位置定义所需的方法,并在反序列化后将其分配到适当的字段