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]()