Lua代码片段收集

Lua实现闭包

--[[@Func :实现闭包
    @Desc : 当一个函数内部嵌套另一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征我们称作词法定界]]
function fuck()
    local i = 0
    return function()
        i = i + 1
        return i
    end
end
c1 = fuck()
print(c1())
print(c1())

序列化Lua表

-- Desc : 序列化Lua表(Convert Lua-Table To String)
function serialize(t)
truelocal mark={}
truelocal assign={}

truelocal function ser_table(tbl,parent)
truetruemark[tbl]=parent
truetruelocal tmp={}
truetruefor k,v in pairs(tbl) do
truetruetruelocal key= type(k)=="number" and "["..k.."]" or k
truetruetrueif type(v)=="table" then
truetruetruetruelocal dotkey= parent..(type(k)=="number" and key or "."..key)
truetruetruetrueif mark[v] then
truetruetruetruetruetable.insert(assign,dotkey.."="..mark[v])
truetruetruetrueelse
truetruetruetruetruetable.insert(tmp, key.."="..ser_table(v,dotkey))
truetruetruetrueend
truetruetrueelse
truetruetruetruetable.insert(tmp, key.."="..v)
truetruetrueend
truetrueend
truetruereturn "{"..table.concat(tmp,",").."}"
trueend

truereturn "do local ret="..ser_table(t,"ret")..table.concat(assign," ").." return ret end"
end

实现Java字符串的Hash算法

-- 实现Java字符串的Hash算法
hash = function(input)
    input = tostring(input);
    local h = 0
    local len = string.len(input)
    local max = 2147483647
    local min = -2147483648
    local cycle = 4294967296

    for i=1, len do
        h = 31 * h + string.byte(string.sub(input, i, i));
        while h > max do
            h = h - cycle
        end
        while h < min do
            h = h + cycle
        end
    end
    return h
end

树形打印lua table表

--Desc: 树形打印lua table表
local print = print
local tconcat = table.concat
local tinsert = table.insert
local srep = string.rep
local type = type
local pairs = pairs
local tostring = tostring
local next = next

function print_lua_table (lua_table, indent)

    if not lua_table or type(lua_table) ~= "table" then
        return;
    end

    indent = indent or 0
    for k, v in pairs(lua_table) do
        if type(k) == "string" then
            k = string.format("%q", k)
        end
        local szSuffix = ""
        if type(v) == "table" then
            szSuffix = "{"
        end
        local szPrefix = string.rep("    ", indent)
        formatting = szPrefix.."["..k.."]".." = "..szSuffix
        if type(v) == "table" then
            print(formatting)
            print_lua_table(v, indent + 1)
            print(szPrefix.."},")
        else
            local szValue = ""
            if type(v) == "string" then
                szValue = string.format("%q", v)
            else
                szValue = tostring(v)
            end
            print(formatting..szValue..",")
        end
    end
end

具体更加详细的内容可参见树形打印lua table表

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

java中的Integer的toBinaryString()方法

在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出Integer类中的toBinaryString()方法

912
来自专栏www.96php.cn

PHP关键字、PHP 语言结构(Language constructs)和函数的区别

1、 什么是语言结构和函数 语言结构: 就是PHP语言的关键词,语言语法的一部分; 它不可以被用户定义或者添加到语言扩展或者库中; ...

3799
来自专栏编程微刊

用原型链的方式写一个类和子类

1432
来自专栏从零开始学自动化测试

pytest文档11-assert断言

断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass...

1544
来自专栏IMWeb前端团队

Zepto这样操作元素属性

本文作者:IMWeb 谦龙 原文出处:IMWeb社区 未经同意,禁止转载 前言 使用Zepto的时候,我们经常会要去操作一些DOM的属性,或元素本身...

5487
来自专栏机器学习算法与Python学习

一文读懂Python中的异常处理

1226
来自专栏散尽浮华

python常用知识梳理

接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理: 1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ ...

2805
来自专栏程序员的SOD蜜

条件表达式的短路求值与函数的延迟求值

延迟求值是 .NET的一个很重要的特性,在LISP语言,这个特性是依靠宏来完成的,在C,C++,可以通过函数指针来完成,而在.NET,它是靠委托来完成的。如果不...

2066
来自专栏码云1024

python简明笔记

通过 for 语句我们可以使用 for 循环。Python 里的 for 循环与 C 语言中的不同。这里的 for 循环遍历任何序列(比如列表和字符串)中的每一...

5779
来自专栏進无尽的文章

编码篇-Block里面的小天地

Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。 通常来说,block都是一些简短代码片段的封装,适...

1162

扫码关注云+社区