String 调用名称存储在字符串中的函数

String 调用名称存储在字符串中的函数,string,lua,computercraft,String,Lua,Computercraft,我有一个功能 function run() print("hi") end 我有一个名为message的字符串,其中包含单词“run”: 但是,我无法使用字符串活动来运行函数run()。我试过: func = loadstring(activity.."()") func() -- I get an error on line 1 saying: attempt to call nil 只要loadstring与run以相同的方式运行,这就可以正常工作。换句话说,loadstring

我有一个功能

function run()
    print("hi")
end
我有一个名为message的字符串,其中包含单词“run”:

但是,我无法使用字符串活动来运行函数
run()
。我试过:

func = loadstring(activity.."()")
func() -- I get an error on line 1 saying: attempt to call nil
只要
loadstring
run
以相同的方式运行,这就可以正常工作。换句话说,
loadstring
行相当于
\u G[activity]()
。如果全局
运行
是在其他环境中创建的,则其计算结果将为
nil

假设Lua函数是第一类值,就像字符串一样,如果可能的话,最好这样做:

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

但是,如果这是在从配置文件或其他文件获取字符串值的上下文中进行的,则不会起作用。

那么,函数运行存储在_G中,因此简单的答案是:

_G[message]()
你能把这些(部分)代码片段放到彼此的上下文中吗?与代码中的
activity
相关的
run在哪里?另外
\u G[activity]()
loadstring(activity..“()”)更有效(
函数(与所有值一样)没有名称。变量有名称。更正确的说法是,您有一个引用函数的全局变量,并且希望使用字符串中变量的名称调用函数。
function run() print("hi") end
activity = run
activity()
_G[message]()