Я занимаюсь большей частью своего программирования на Python, и я использую методы ООП для большинства моих проектов. Недавно я начал изучать библиотеку игр и движок Love2D. Мне удалось настроить некоторые настройки, а затем подумал о создании класса GameObject. Но что это? У Lua нет классов! В нем есть столы, метатеги и другие подобные вещи. У меня много проблем с головами или хвостами, даже после того, как я прочитал документацию несколько раз.Ощущение ООП в Lua
Рассмотрим следующий пример:
catClass = {}
catClass.__index = catClass
catClass.type = "Cat"
function catClass.create(name)
local obj = setmetatable({}, catClass)
obj.name = name
return obj
end
cat1 = catClass.create("Fluffy")
print(cat1.type)
cat2 = catClass.create("Meowth")
cat1.type = "Dog"
print(cat1.type)
print(cat2.type)
print(catClass.type)
Выход этого заключается в следующем:
Cat
Dog
Cat
Cat
То, что я не понимаю, почему меняется cat1.type к «Собака» не вызывает тождественны изменения в cat2 и catClass. Создает ли метаданные копию таблицы? Google не предоставил полезных результатов (очень мало хороших объяснений Lua).