Lua string.dump()

序列化.jpg

前言#

今天我们来一起看一个神奇的函数,这个函数乍一看根本不知道是干嘛用的,仔细一看还是不明白,在查询了多方资料以后终于命名明白他的用途,这里不得不提到一个词——序列化。

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

这个词听起来就高大上,但是我们今天的函数用起来却非常简单,就是调用函数stringdump()将其它函数序列化,然后函数就可以传递了,还把函数传递到另一个进程,甚至存储到文件中都是可以的。

内容#


string.dump()##

  • 原型:string.dump (function)
  • 解释:返回一个包含所给函数二进制描述的字符串,以至于在此之后可以使用函数loadstring()利用所得到的字符串来返回一个函数拷贝,需要注意的是函数只能是Lua函数并且没有upvalues(外部局部变量)。

Usage##

  • 首先新建一个文件将文件命名为dumptest.lua然后辨析额如下代码:
--自定义一个函数
function custom_func(num1, num2)
    local ret = num1 + num2;
    print("\nnum1 = "..num1)
    print("num2 = "..num2)
    print("num1 + num2 = "..ret)
end

-- 将函数序列化
local func_content = string.dump(custom_func)
print("\nfunc_content = "..func_content)

-- 将转化后的字符串写入文件
local outfile = io.open("dumptest.txt", "w")
local outnum = outfile:write(func_content)
outfile:close()

-- 从文件总读取内容
local infile = io.open("dumptest.txt", "r")
local incontent = infile:read("*a")
infile:close()
print("\ninput content is "..incontent)

-- 加载函数
local myfunc = loadstring(incontent)

-- 执行函数
myfunc(1, 1)

myfunc(3, 6)

-- 输出这个幸福的七月七
myfunc("7" ,".7")

print("\nthis is a happy day!")
print(os.date())
  • 运行结果:
string_dump.png

总结#

  • 看了这个函数是不是有种非常神奇的感觉,原来传说中的序列化可以离我们这么近。
  • 在调用了函数string.dump()之后函数custom_func()被转化成字符串保存在文件中,可以在使用时再取出来。
  • 这个函数一般写逻辑代码应该用不到,更多的是做框架的时候用的功能,进过序列化的函数可以通过网络传送、转化、再使用。
  • 好了,在这个幸福的日子里,祝你节日快乐吧,别在这搬砖了,抓紧撩妹去吧。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一篇 语言 第0章 序言 Lua仅让你用少量的代码解决关键问题。 Lua所提供的机制是C不擅长的:高级语言,动态...
    testfor阅读 7,809评论 1 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,241评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,713评论 18 399
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,933评论 0 17
  • 以后若还会有争吵我就温柔对待你 像你哄我那样哄你,绝不来硬的。只因为,我爱你。
    情若太狂阅读 1,562评论 0 0

友情链接更多精彩内容