Я новичок в lua, и я пытаюсь понять их подход к ООП. У меня есть этот 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
, в то время как я думаю, что это должна быть действительная таблица. Перед паникой на консоль печатается test
, поэтому я уверен, что self
инициирован правильно. (data
нет nil
как могу распечатать).
Я использую Lua 5.1.
Кто-нибудь знает, что происходит?
ах, я понимаю. В качестве эксперимента я инициализировал 'header' следующим образом:' header = setmetatable ({}, {__index = table}), ', тогда я могу назвать его как' self.header: insert (data) ', или вы думаете Это плохая идея? –
@WouterHuysentruit: Это * ужасная идея. Просто вызовите функцию правильно. –
ОК, я возьму ваше слово –