Перейти к содержимому

Поиск по сайту

Результаты поиска по тегам 'class'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • some blog name
  • Дача Игоря
  • Путешествия Xytabich'а
  • Рецепты программирования
  • Шкодим по крупному
  • 123
  • mineOS и её удивительный мир
  • Поляна говнокода Bumer 32

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Моды и плагины
    • Жалобы
    • Ивенты и конкурсы
    • Файлы
  • Общение
    • Задать вопрос
    • Обратная связь
    • Беседка
    • Шкатулка
  • Технический раздел
    • Корзина

Группы продуктов

Нет результатов для отображения.


Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


ICQ


Yahoo


Jabber


ВКонтакте


Город


Интересы

Найдено 1 результат

  1. Предисловие Во многих языках программирования классы включены в стандартную реализацию. Однако Lua настолько минималистичен, что по умолчанию классов в нем нет. Но нам ничего не мешает реализовать классы используя стандартные возможности языка. В моей реализации классы реализованы через замыкания. Описание моей библиотеки Здесь особо описывать нечего, поэтому я просто приложил примеры кода( комментарии обязательны к прочтению! ) 1. Создание класса local Class = require("class") -- Класс для точки в 2д пространстве local Point2d = Class({ -- Конструктор класса __init__ = function(self, x, y) self.x, self.y = x, y end, -- Методы класса -- Примечание: -- аргументы каждого метода класса обязательно -- должны начинаться с "self" (ну, либо с "this" или "it", кому как угодно) printCoords = function(self) print("X = ".. self.x .."; Y = ".. self.y) end }) -- Создание экземпляра класса Point2d local p1 = Point2d(5, 11) -- Вызов метода p1.printCoords() -- Выведет "X = 5; Y = 11" local p2 = Point2d(p1.x * 2, p1.y * 2) p2.printCoords() -- Выведет "X = 10; Y = 22" 2. Ты ведь не забыл про наследования?! Я не очень люблю нагромождать свой код зависимостями, а потом постоянно ломать голову мыслями "А от чего у меня унаследован вот этот класс? От какого именно класса у меня унаследован этот метод? Почему одно наследование перекрывает другое? " Поэтому я реализовал возможность выборочно унаследовать необходимый метод у конкретного класса, так как такой способ наследования тупо проще, понятнее, и лишний раз не нагружает разум программиста адскими зависимостями между классами. Простой пример: local Class = require("class") -- Класс для точки в 2д пространстве local Point2d, Point2d_prototype = Class({ __init__ = function(self, x, y) self.x, self.y = x, y end, printCoords = function(self) print("X = ".. self.x .."; Y = ".. self.y) end }) local Player = Class({ __init__ = function(self, x, y, ...) self.x, self.y = x, y self.otherInfo = ... end, -- Унаследуем метод "printCoords" у класса Point2d -- Для этого обратимся к *прототипу* этого метода и получим наследуемый метод по имени printCoords = Point2d_prototype.printCoords }) -- Создание экземпляра класса Point2d local point = Point2d(5, 11) -- Вызов метода point.printCoords() -- Выведет "X = 5; Y = 11" local player = Player(4, 2, "RccHD") player.printCoords() -- Выведет "X = 4; Y = 2" Исходники библиотеки Библиотека получилась совсем небольшой, поэтому вы можете скопировать исходник прямо из этой статьи: Либо скачать с pastebin ( https://pastebin.com/WVxaHb4Y ) class.lua : local prepareObj prepareObj = function(root, obj, proto, mt) for k, v in pairs(proto) do local t = type(v) if t == "table" and k ~= "__proto__" and k ~= "__root__" then obj[k] = prepareObj(root, { __proto__ = v, __root__ = root }, v, mt) end end setmetatable(obj, mt) return obj end local classMt = { __index = function(self, key) local v = self.__proto__[key] if type(v) == "function" then return function(...) return v(self.__root__, ...) end else return v end end } return function(proto) proto.__new__ = function(...) local obj = { __proto__ = proto } obj.__root__ = prepareObj(obj, obj, proto, classMt) if proto.__init__ ~= nil then proto.__init__(obj.__root__, ...) end return obj end return proto.__new__, proto end Для того, чтобы начать использовать классы в своих программах нужно положить файл class.lua в папку рядом со своими программами (или в /usr/lib , но лучше не надо) После этого импортируйте библиотеку написав в своем коде вот это: local Class = require("class") И помните: важно не количество кода, а его качество!
×
×
  • Создать...