lua наследование

Страницы: 1
RSS
lua наследование, lua ооп
 
Подскажите пожалуйста, как наследовать класс? Не получается выдаёт ошибку

Код
local car  = {} -- Прежде чем создавать экземпляры объекта, необходимо описать соответствующий ему класс.
car.__index = car  --__index содержит указатель на сам класс. Это нужно будет для правильной работы оператора self
function car:set(model, color) --инициализируем поля класса
local self = setmetatable({},car) --далее идет превращение таблицы в "класс", объяснять не буду, т.к для этого нужна отдельная статья 
self.model = model -- 
self.color = color --  
return self
end 
function car:get() --функция получения результата 
return self.model, self.color 
end 
moto = {} -- инициализируем класс мото 
function moto:pet() --переназначение метода 
return "new" 
end 
setmetatable(moto,{__index = car}) --наследуемся 
m = moto.set("URAL","BLUE") --меняем название и цвет 
print(m:get()) -->мы увидим 2000 year 
print(m:pet()) --> URAL BLUE 


 
https://habr.com/post/259265/
 
Спасибо большое за ссылку Уважаемый Николай.
Долго ломал голову, Как сделать правильное наследования от класса. Получилось так.
car = {} --создадим "класс" автомобиль
function car:set(model) --инициализируем поля класса
local obj = {}
obj.model = model  
setmetatable(obj,self)  
self.__index = self --перед
return obj -- возвращаем объект!
end  
function car:get(obj)  
return self.model
end
moto = {} -- класс мото
function moto:pet() --переназначение метода
return "new"
end
setmetatable(moto,{__index = car}) --наследуемся
m = moto:set("VAZ") --меняем название  
print(m:get()) -->мы увидим VAZ
print(m:pet()) --> new

Теперь интересует Как избавиться от двоеточие при объявление экземпляра класса?.
Помню как-то достигал.
вот здесь
local car  = {} -- Прежде чем создавать экземпляры объекта, необходимо описать соответствующий ему класс.
car.__index = car  --__index содержит указатель на сам класс. Это нужно будет для правильной работы оператора self
function car.set(model, color) --Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения.
 local self = setmetatable({}, car) --Переопределяет метатаблицу вновь созданного объекта, в результате чего объект получает доступ к методам класса. Методов пока нет, но они будут описаны позже.
   self.color = color
   self.model = model
 return self
end
function car.get_color(self)
 z = self.color
return z
end
function car.get_model(self)
 z = self.model
return z
end
local i = car.set("kia","black") -- ставим точку
print(i:get_model())
 
https://habr.com/post/182018/
Страницы: 1
Читают тему
Наверх