将字符串转换为函数

时间:2014-07-13 09:18:49

标签: lua

在Lua中,您可以将函数转换为字符串,返回看似地址

的字符串
print(print)
function: 0x41a360

可以反过来吗? e.g。

local aliasPrint = function: 0x41a360
aliasPrint("Hello, World!")
Hello, World!

我在网上寻找解决方案,但我的谷歌可能缺乏。

2 个答案:

答案 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}}替换。