调用一个函数,其名称存储在一个字符串中。

我有一个函数,例如:

function run()
    print("hi")
end

我有一个包含单词“run”的字符串message:

activity = message
print(activity) --返回run

然而,我无法使用字符串activity来运行函数“run()”。我尝试过:

func = loadstring(activity.."()")
func() -- 在第1行上我得到一个错误,说:尝试调用nil
点赞
用户501459
用户501459
function run() print("hi") end
activity = "run"
loadstring(activity.."()")()

只要 loadstring 运行在和 run 相同的 环境 中,这段代码就可以正常工作。换句话说,loadstring 这一行等同于 _G[activity]()。如果全局变量 run 是在其他环境中创建的,这个代码将返回 nil

考虑到 Lua 函数和字符串一样可以作为第一等值,如果可能的话最好使用以下代码:

function run() print("hi") end
activity = run
activity()

不过如果这个代码处于从配置文件中获取字符串值的上下文中,这种做法可能行不通。

2015-07-02 20:53:26
用户3979429
用户3979429

好的,函数 run 存储在 _G 中,那么简单的答案是:

_G[message]()
2015-07-03 19:22:50