首页 文章

表作为成员变量似乎总是为零

提问于
浏览
0

我试图了解他们的OOP方法 . 我有这个 WebServerClient 对象从连接到Web服务器的客户端接收套接字:

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:调用Lua API时出现无保护错误(WebServerClient.lua:20:尝试调用方法'insert'(零值))

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

我正在使用Lua 5.1 .

谁知道发生了什么?

1 回答

  • 2

    self.header 不是 nil 值 . nil 的值是 self.header:insert . header 是一个表,但它是一个空表 . 因此, header.insertnil .

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

    表格不像字符串,您可以通过元方法从 string 库中调用函数 .

相关问题