在Lua中,您可以将函数转换为字符串,返回看似地址
的字符串print(print)
function: 0x41a360
可以反过来吗? e.g。
local aliasPrint = function: 0x41a360
aliasPrint("Hello, World!")
Hello, World!
我在网上寻找解决方案,但我的谷歌可能缺乏。
答案 0 :(得分:3)
实际上,您没有将函数转换为字符串。 string.dump
在有限的情况下做到这一点。并且,load
是相反的。
local function f()
print("I'm a function")
end
local d = string.dump(f)
print(string.format("%q", d))
local g = load(d);
g()
关于你的方法,我只能问,“为什么?”
tostring
是一个函数,它给出了一个具有基本信息的对象的名义表示。在许多情况下,(功能和表格),唯一性是必不可少的属性。因此,tostring
在其表示中包含了它。许多语言都有类似的东西,但并不总是显示出独特性。 (有些确实在调试器中显示了更多属性。)
答案 1 :(得分:0)
Lua没有反射,但函数名称作为字符串存储在内存中作为“键”。你可以用类似的方式实现
local aliasPrint = _ENV["print"]
aliasPrint("Hello, World!")
输出:
Hello, World!
_ENV
是Lua全局变量运行环境的查找表(对于Lua v5.1-,改为使用_env
)
如果您在对象中使用某个功能,只需_ENV["print"]
的{{1}}替换。