将一个字符串转换为函数

在 Lua 中,您可以将函数转换为字符串,其中它返回一个看似是地址的值。

print(print)
function: 0x41a360

是否有可能做反向操作?例如:

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

我在网上搜索了解决方案,但我的谷歌技能可能还欠缺。

点赞
用户2226988
用户2226988

实际上,你并没有将一个函数转换成字符串。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 将其包含在其表示中。许多语言都有类似的东西,但并不总是显示独一无二。(有些调试器可以显示更多的属性。)

2014-07-13 14:50:10
用户1270003
用户1270003

Lua 没有反射机制,但是函数名以字符串形式存储在内存中作为“键”。您可以以类似的方式实现

local aliasPrint = _ENV["print"]
aliasPrint("Hello, World!")

输出:

Hello, World!

_ENV是Lua全局变量的运行环境的查找表(对于Lua v5.1-,请改用_env

如果您正在使用对象中的函数,只需将_ENV [“print”]替换为table_or_object [“function_name”]

2014-07-13 15:14:58