Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 15
1

Подскажите по ООП в Lua

13.02.2017, 18:52. Просмотров 1372. Ответов 3
Метки нет (Все метки)


Всем привет! Изучаю язык и попытался коснуться объектов. Что нужно подправить чтобы код работал ?
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Groop  = {} -- Создаем группу людей (класс)
people = {} -- Массив объектов класса
 
counter = 1
 
 
function Groop:new ( deposit, id )-- Описание класса
 
        -- Свойства
        local obj = {}
 
        obj.deposit = deposit
        obj.id = id
 
 
        -- Метод чтения депозита
        function obj:getDeposit()
            return self.deposit
        end
 
        -- Метод записи депозита
        function obj:setDeposit( deposit )
            self.deposit = d
        end
 
        -- Метод чтения Id
        function obj:getId()
            return self.id
        end
 
        -- Метод записи id
        function obj:setId( id )
            self.id = id
        end
 
end -- Конец описания класса
 
math.randomseed ( os.time() )
 
 
while ( counter <= 100 ) do -- Цикл 100 раз
    people[counter] = Groop:new(  10000, math.random(1001, 9999) )-- Создаем объекты класса ( 100 штук ) с 2-мя характеристиками: депозит и id
    counter = counter + 1
end
 
counter = 1
 
while ( counter <= 100 ) do -- Выводим на экран айдишники всех созданных объектов
    print ( people[counter]:getId() )
    counter = counter + 1
end
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2017, 18:52
Ответы с готовыми решениями:

Lua наследование, lua ооп
Подскажите пожалуйста, как наследовать класс? Не получается выдаёт ошибку local car = {} --...

Lua, ооп библиотеки, виртуальные функции
Не подскажет ли кто ооп библиотеку с возможностью создания виртуальных функций - и самое главное с...

Подскажите пожалуйста, правильно выделять память под lua состояние
Подскажите пожалуйста, правильно выделять память под lua состояние. Выполнение кода не...

Подскажите, пожалуйста, как их правильно настроить пути, чтобы lua находил модули
Подскажите, пожалуйста, как их правильно настроить пути, чтобы lua находил модули? Я скачал...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
3
Покинул форум
2729 / 1060 / 290
Регистрация: 07.05.2015
Сообщений: 2,123
13.02.2017, 21:14 2
Лучший ответ Сообщение было отмечено Corona SDK как решение

Решение

Самый простой пример:
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
local Group = {}
 
function Group:new(o, deposit, id)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  self.deposit = deposit
  self.id = id
  return o
end
 
function Group:getDeposit()
  return self.deposit
end
 
function Group:setDeposit(deposit)
  self.deposit = deposit
end
 
function Group:getId()
  return self.id
end
 
function Group:setId(id)
  self.id = id
end
 
local people = {}
 
math.randomseed(os.time())
for i=0,100 do
  local rnd = math.random(1001, 9999)
  people[i] = Group:new(nil, 10000, rnd)
  print(people[i]:getId())
end
1
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 15
13.02.2017, 22:30  [ТС] 3
greg zakharov большое спасибо коллега!

Добавлено через 47 минут
greg zakharov Я тут ваш код разобрал и понял что мой аналогичен вашему. Просто надо было пару строчек в описание моего класса вписать:

Добавлено через 54 секунды
setmetatable(obj, self)
self.__index = self
return obj

И все!
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,177
17.02.2017, 17:49 4
Lua
1
2
3
4
5
6
7
8
9
10
local Group = {}
 
function Group:new(o, deposit, id)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  self.deposit = deposit
  self.id = id
  return o
end
???

Я думаю, вы все таки это хотели сделать:
Lua
1
2
3
4
5
6
7
8
9
10
local Group = {}
Group.__index = Group
 
function Group:new(o, deposit, id)
  o = o or {}
  setmetatable(o, self)
  o.deposit = deposit
  o.id = id
  return o
end
От того, что вы назначили таблице o метатаблицу Group, self ни коем образом не превратился в o. Он по прежнему Group.

На самом деле, я и по ныне недоумеваю, почему базовый пример из настольной книги всех луашников выглядит так:
Lua
1
2
3
4
5
6
function Account:new (o)
      o = o or {}   -- create object if user does not provide one
      setmetatable(o, self)
      self.__index = self
      return o
    end
А не так:
Lua
1
2
3
4
5
6
7
Acount.__index = Acount
      
function Account:new (o)
      o = o or {}   -- create object if user does not provide one
      setmetatable(o, self)
      return o
    end
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2017, 17:49

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

подскажите ООП
с ООП знаком, учил по статьям в нете. Но наткнулся на задание, которое чувствую что простое, но не...

Подскажите новичку в понимании ООП!
Доброго времени суток! Я только начинаю изучать java script. Недавно начала знакомится с ООП и у...

подскажите пож видеоуроки по ООП
Здравствуйте! Учил основы PHP по Е.Попову очень понравилось и понятно , в процессе делали по теме...

Подскажите задачки для ООП С++
хочу учить ООП С++ но не могу найти задач в инете. Помогите пожалуйста!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.