前言
由于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。