Lua 扩展方法

table 扩展

--[[--
    计算table 不为nil元素个数
]
function table.nums(t)
    local count = 0
    for k, v in pairs(t) do
        count = count + 1
    end

    return count
end


--[[--
    判断table是否为空
]
function table.isEmpty(t)
    return _G.next(t) == nil
end

--[[--
    判断table 是否为nil 或 空
]
function table.isNilOrEmpty(t)
    return t == nil or _G.next(t) == nil
end


--[[--
    遍历table元素
]]
function table.walk(t, fn)
    for k, v in pairs(t) do
        fn(v, k)
    end
end

--[[--
    table 克隆
]
function table.clone(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        copy = {}
        for orig_key, orig_value in next, orig, nil do
            copy[clone(orig_key)] = clone(orig_value)
        end
        --设置clone元表
        setmetatable(copy, clone(getmetatable(orig)))
    else -- number, string, boolean, etc
        copy = orig
    end
    return copy
end

--[[--
    clone 对象
]
function clone(object)
    local lookup_table = { }
    local function _copy(object)
        if type(object) ~= "table" then
            return object
        elseif lookup_table[object] then
            return lookup_table[object]
        end
        local new_table = { }
        lookup_table[object] = new_table
        for key, value in pairs(object) do
            new_table[_copy(key)] = _copy(value)
        end
        return setmetatable(new_table, getmetatable(object))
    end
    return _copy(object)
end

String 扩展

--[[--
   去除输入字符串头部的空白字符,返回结果
]
function string.ltrim(input)
    return string.gsub(input, "^[ \t\n\r]+", "")
end

--[[--
    去除输入字符串尾部的空白字符,返回结果
]]
function string.rtrim(input)
    return string.gsub(input, "[ \t\n\r]+$", "")
end

--[[--
    去掉字符串首尾的空白字符,返回结果
]]
function string.trim(input)
    input = string.gsub(input, "^[ \t\n\r]+", "")
    return string.gsub(input, "[ \t\n\r]+$", "")
end

--[[
    过滤字符串中的空字符
--]]
function string.filterNullChar(str)
    if not str then
        return str
    end
    local retStr = ""
    for char in string.gmatch(str,"[^%z]") do      -- 存在空字符,造成字符串截断
        retStr = retStr..char
    end
    return retStr
end

--[[
    判断字符串是否为空
--]]
function string.isNilOrEmpty(str)
    str = string.filterNullChar(str)
    return str == nil or str == ""
end

--[[
    过滤字符串中的空字符
--]]
function string.filterNullChar(str)
    if not str then
        return str
    end
    local retStr = ""
    for char in string.gmatch(str,"[^%z]") do      -- 存在空字符,造成字符串截断
        retStr = retStr..char
    end
    return retStr
end

Math扩展

--[[--
    四舍五入
]]
function math.round(value)
    value = tonumber(value) or 0
    return math.floor(value + 0.5)
end

猜你喜欢

转载自blog.csdn.net/langya413/article/details/81167552
今日推荐