Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Classes and Objects in addons


icreator

Рекомендуемые сообщения

Code:

Class( "overtip", { handlers = {} } )
--------------------------------------------------------------------------------
-- INIT
--------------------------------------------------------------------------------
function overtip:init( widget )
self.widget = self.widget or widget

self.wtOvertip = self.widget:GetChildChecked( "Overtip", false )
self.wtOvertip:SetFade( OVERTIP_TEXT_OPACITY )
self.wtMark = self.widget:GetChildChecked( "Image", false )
self.bar = progressbar{ widget = self.widget:GetChildChecked( "Progress", false ) }
self.bar:init()
end
--------------------------------------------------------------------------------
-- PUBLIC
--------------------------------------------------------------------------------
function overtip:Show( state )
if state ~= self.visible then
self.visible = state
self.widget:Show( self.visible )
end
end


и создание объекта потом как
Code:

local myObj = overtip{ var1 = val1, ... }


but
Code:
Class

- get error mess

может быть, можно без объявления класса создавать объекты обычным образом?
Ссылка на комментарий
Поделиться на другие сайты

И откуда такой код взялся, интересно?

Quote:
может быть, можно без объявления класса создавать объекты обычным образом?

Любая таблица - объект, созданный обычным образом. В чем проблема-то?

Если так сильно не хватает такого Class, то вот:

Code:

local function r( cl, t )

return setmetatable( t or {}, { __index = cl } )

end

local function d( t )

return setmetatable( t or {}, { __call = r } )

end

function Class( name, t )

Global( name, d( t ) )

end

Ссылка на комментарий
Поделиться на другие сайты

а вот нашла в системном коде:

Code:

function addmetatable( tab, mt )

local _mt = getmetatable( tab )

_mt = type( _mt ) == "table" and _mt or {}

for k, v in mt do

_mt [ k ]  = v

end

setmetatable( tab, _mt )

end

-- ScriptClassesImplementation.lua

-- REQUIRES: ScriptStandardExtension.lua

--------------------------------------------------------------------------------

do

local constructor = function( cl, object )

local object = object or {}

addmetatable( object, { __index = cl } )

return object

end

------------------------------------------------------------------------------

function class( proto )

addmetatable( proto, { __call = constructor } )

return proto

end

------------------------------------------------------------------------------

function Class( name, object )

Global( name, class( object ) )

end

end

--------------------------------------------------------------------------------

только зачем тут do..end ?

Ссылка на комментарий
Поделиться на другие сайты

довольно интересно, а я с помощью

Code:

function Clone( value )

if type( value ) == "table" then

local new = {}

for id, val in value do

new [ id ]  = Clone( val )

end

return new

else

return value

end

end

---------------------

Global( "mark", {} )

mark.new = function (self)

return Clone(self)

end

------------------

создание объекта:

local myObj = mark:new()

Ссылка на комментарий
Поделиться на другие сайты

То же самое и я написал выше.

Quote:
только зачем тут do..end ?

Чтоб к локальной функции constructor за пределами do..end никто не смог обратиться.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования