[Lua]patch系统实现

本文介绍了如何利用Lua的灵活性实现动态补丁系统,通过loadstring在不重启程序的情况下修改函数功能。文中展示了如何替换已有函数并添加新函数到环境。未来应用可能包括远程代码更新和即时bug修复。
摘要由CSDN通过智能技术生成

前言

由于lua语言的灵活性,使得其可以完成一些在其他语言中无法实现的功能,例如今天要分享的patch(补丁)系统。
patch系统可以允许在不重新启动的情况下,修改原本的函数功能,这么说可能很抽象,那么先看下面的例子

function func1()
    print("Raw func1")
end

function func2()
    print("Raw func2")
end


str = [[
function func1()
    print("Patched func1")
end
function func2()
    print("Patched func2")
end
function func3()
    print("Patched func3")
end
]]
print("\n初始状态")
func1()
func2()
print("\n执行Patch之后")
loadedChunk = loadstring(str)
loadedChunk()

func1()
func2()
func3()

先来开看运行之后的输出
在这里插入图片描述

一开始在代码中,定义了两个方法func1和func2。之后在str中又定义了一遍func1和func2,于是在执行完loadstring以后,func1和func2的功能被改变了,是不是很神奇?
而对于原本没有定义的func3,则会直接添加到当前env中。

总结

其实也没什么好总结的,主要说说展望吧,如果这里的str不是用代码定义,而是通过外部传入,例如tcp、udp,则可以直接重定义愿代码中的功能。如果用在修bug领域,则可以免重启修bug。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值