我在Lua中重新定义了打印功能
local myThing = PrintThing
function PrintThing (text)
... some code ...
return myThing(text)
end
适用于我的本地脚本
但不在其他剧本中
如何全局重新定义此打印功能?
答案 0 :(得分:2)
一般来说,你不能。在最好的情况下,您可以在全局环境中重新定义函数(_G.PrintThing=...
)。但即使这并不总是允许的。例如。主机应用程序在沙箱中运行您的代码,并且不提供对全局环境的访问。在这种情况下,你必须让C模块访问全局env(但我不认为沙盒env允许加载这样的模块)。
第二个varian是 - 在您的环境中设置此功能。如果您在同一个环境中加载新模块,那么在加载库之前只需要重新定义函数。
如果在加载模块后尝试重新定义函数,则将取决于模块本身。例如如果使用local PrintThing = PrintThing
,加载后将无法看到您的新功能。
C代码也可以直接使用C函数。
答案 1 :(得分:0)
如何全局重新定义此打印功能?
修改Lua源并构建自己的解释器。
print
在Lua源中定义。将其重新定义为运行时的唯一方法是运行类似于您所显示的代码。
答案 2 :(得分:0)
您的软件可能会为其加载的每个脚本文件创建一个新状态,以避免不同“插件”之间的冲突。
意味着全局重载是不可能的,除非你要修改程序(并且你可能无法访问源代码,如果它是一个黑客/脚本框架,加上它可能会被混淆)。
然而,您通常可以做的是,创建一个文件,该文件会重载该函数并将其包含在每个文件的开头,从而创建一个新状态。
此外:许多基于插件的框架都能够加载全局lua文件,在这种情况下,您需要找出是否存在类似这样的内容。
据我所知,在libs文件夹中创建一个文件,覆盖该函数应该适合你。
如果您正在使用,我认为您正在使用。