我有一个功能,例如
function run()
print("hi")
end
我有一个名为message的字符串,其中包含单词“run”:
activity = message
print(activity) --returns run
但是我无法使用字符串活动来运行函数run()
。我试过了:
func = loadstring(activity.."()")
func() -- I get an error on line 1 saying: attempt to call nil
答案 0 :(得分:2)
好吧,函数运行存储在_G中,所以答案很简单:
_G[message]()
答案 1 :(得分:1)
function run() print("hi") end
activity = "run"
loadstring(activity.."()")()
只要loadstring
与run
在同一environment中运行,此方法就可以正常运行。换句话说,loadstring
行等同于_G[activity]()
。如果在其他某些环境中创建了全局run
,则会评估为nil
。
鉴于Lua函数是第一类值,就像字符串一样,如果可能的话,最好这样做:
function run() print("hi") end
activity = run
activity()
虽然如果这是在你从配置文件或其他东西获得字符串值的上下文中,那就不行了。