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

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

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

Всем привет! Изучаю язык и попытался коснуться объектов. Что нужно подправить чтобы код работал ?
C++
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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2017, 18:52
Ответы с готовыми решениями:

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

LUA + C++
Привет всем :) я чото не понимаю чо у меня выевляется ошибки luaavg.obj...

Скрипты lua
Вопрос: вот я у себя на хабе (дсс) настроил викторину, а как мне сделать чтобы...

Lua 5.3 и LuaJit
Возможно ли совместить subj в проекте одновременно? Требуется часть скриптов...

Установка Lua
Здравствуйте! Подскажите, пожалуйста как это сделать: Что бы вы могли...

3
greg zakharov
Покинул форум
1947 / 823 / 236
Регистрация: 07.05.2015
Сообщений: 1,645
13.02.2017, 21:14 #2
Лучший ответ Сообщение было отмечено Corona SDK как решение

Решение

Самый простой пример:
C++
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
Corona SDK
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
Mirmik
techpriest
620 / 201 / 56
Регистрация: 27.02.2014
Сообщений: 1,068
17.02.2017, 17:49 #4
C++
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
???

Я думаю, вы все таки это хотели сделать:
C++
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.

На самом деле, я и по ныне недоумеваю, почему базовый пример из настольной книги всех луашников выглядит так:
C
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
А не так:
C
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2017, 17:49

Учебник по Lua
Добрый день! Подскажите пожалуйста хороший учебник по Lua на русском или...

vs c++ & lua
Здравствуйте, занимаюсь разработкой 3д игры, пишу движок и прочее, когда то...

Парсинг lua
Здравствуйте форумчане,меня озадачило такой задачей,нужно из текста Client...


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

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

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