Вы можете достичь желаемого, объединив ответ Дуга с вашим исходным сценарием, например так:
Button = {
x = 0,
y = 0,
w = 10,
h = 10,
Texture = "buttonimg.png",
onClick = function() end
}
setmetatable(Button,
{ __call = function(self, init)
return setmetatable(init or {}, { __index = Button })
end })
newbutton = Button {
onClick = function()
print("button 1 pressed")
end
}
newbutton2 = Button {
x = 12,
onClick = function()
print("button 2 pressed")
end
}
(Я действительно проверял это, это работает.)
Редактировать : Вы можете сделать это немного красивее и использовать многократно, например:
function prototype(class)
return setmetatable(class,
{ __call = function(self, init)
return setmetatable(init or {},
{ __index = class })
end })
end
Button = prototype {
x = 0,
y = 0,
w = 10,
h = 10,
Texture = "buttonimg.png",
onClick = function() end
}
...