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:insert
。 header
是一个 table,但它是一个 空的 table。因此,header.insert
是 nil
.
如果您尝试调用 Lua 标准函数 table.insert
,则无法通过实际的 table 调用它。您必须这样称呼它 table.insert(tbl, value)
,其中 tbl
是您要插入的 table。
表不像字符串,您可以在表中通过元方法调用 string
库中的函数。
我是 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:insert
。 header
是一个 table,但它是一个 空的 table。因此,header.insert
是 nil
.
如果您尝试调用 Lua 标准函数 table.insert
,则无法通过实际的 table 调用它。您必须这样称呼它 table.insert(tbl, value)
,其中 tbl
是您要插入的 table。
表不像字符串,您可以在表中通过元方法调用 string
库中的函数。