Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Lua] Альтернативная реализация классов , (yet another) 
V
    Опции темы
setq
Дата 30.11.2006, 17:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет. Я написал на досуге решение для создания классов a-la Ruby в Lua. Публикую здесь, в надежде, что это может быть интересно.

Код

-- Ruby-like classes in Lua

local object_methods = {}
object_methods.__index = object_methods
Object = {__instance_methods = object_methods}

local class_methods = {}
class_methods.__index = class_methods
Class = {__instance_methods = class_methods}

setmetatable(Object,class_methods)  --Object is Class
setmetatable(Class,class_methods)  --Class is Class
setmetatable(class_methods,object_methods)  --any class is Object

function object_methods:initialize() end

function class_methods.__call(cls,...)  --new
  local instance = {}
  setmetatable(instance,cls.__instance_methods)
  instance:initialize(...)
  return instance
end

function class_methods.initialize(newclass,instance_methods,super)
  instance_methods.__index = instance_methods
  newclass.__instance_methods = instance_methods
  setmetatable(instance_methods,(super or Object).__instance_methods)
end

function class_methods.derivedclass(super,instance_methods)
  return Class(instance_methods,super)
end


После этого можно писать что-то в этом роде

Код


o = Object()

A = Class{
  f = function()
    print 'Boo!'
  end
}
a = A()
a:f()

B = A:derivedclass{}
b = B()
b:f()



Это не единственный способ реализации классов в Lua. К тому же, это не полный (но легко расширяемый) код. Другие примеры реализации классов можно найти в официальном учебнике и на форуме пользователей.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.0774 ]   [ Использовано запросов: 18 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.