Table 作为成员变量似乎总是 nil

Table as member variable seems to be always nil

我是 lua 的新手,我正在尝试了解他们的 OOP 方法。我有这个 WebServerClient 对象,它从连接到网络服务器的客户端接收套接字:

WebServerClient = {}
local WebServerClient_mt = { __index = WebServerClient }

function WebServerClient:Create(socket)
    local self = setmetatable({
        socket = socket,
        buffer = "test",
        header = {},
    }, WebServerClient_mt)
    socket:on("receive", function(socket, data)
        print(self.buffer)
        self.header:insert(data) -- PANIC happens on this line!
        self:onData(data)
    end)
    return self
end

问题是,一旦客户端发送了一些数据,我得到错误:

PANIC: unprotected error in call to Lua API (WebServerClient.lua:20: attempt to call method 'insert' (a nil value))

因此,self.header 似乎是 nil,而我认为它应该是有效的 table。在恐慌之前,test 被打印到控制台,所以我很确定 self 已正确启动。 (data 不是 nil,因为我可以打印出来)。

我正在使用 Lua 5.1.

有人知道发生了什么事吗?

self.header 不是有问题的 nil 值。 nil 值为 self.header:insertheader 是一个 table,但它是一个 空的 table。因此,header.insertnil.

如果您尝试调用 Lua 标准函数 table.insert,则无法通过实际的 table 调用它。您必须这样称呼它 table.insert(tbl, value),其中 tbl 是您要插入的 table。

表不像字符串,您可以在表中通过元方法调用 string 库中的函数。