Khác biệt giữa bản sửa đổi của “Mô đun:Classic”

Nội dung được xóa Nội dung được thêm vào
From rxi/classic
 
(Không có sự khác biệt)

Bản mới nhất lúc 17:53, ngày 15 tháng 10 năm 2021

Tài liệu mô đun[tạo]
--
-- classic
--
-- Copyright (c) 2014, rxi
--
-- This module is free software; you can redistribute it and/or modify it under
-- the terms of the MIT license. See LICENSE for details.
--
local Object = {}
Object.__index = Object

function Object:new() end

function Object:extend()
    local cls = {}
    for k, v in pairs(self) do if k:find("__") == 1 then cls[k] = v end end
    cls.__index = cls
    cls.super = self
    setmetatable(cls, self)
    return cls
end

function Object:implement(...)
    for _, cls in pairs({...}) do
        for k, v in pairs(cls) do
            if self[k] == nil and type(v) == "function" then
                self[k] = v
            end
        end
    end
end

function Object:is(T)
    local mt = getmetatable(self)
    while mt do
        if mt == T then return true end
        mt = getmetatable(mt)
    end
    return false
end

function Object:__tostring() return "Object" end

function Object:__call(...)
    local obj = setmetatable({}, self)
    obj:new(...)
    return obj
end

return Object