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

时间:2015-07-02 20:37:05

标签: string lua computercraft

我有一个功能,例如

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

2 个答案:

答案 0 :(得分:2)

好吧,函数运行存储在_G中,所以答案很简单:

_G[message]()

答案 1 :(得分:1)

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

只要loadstringrun在同一environment中运行,此方法就可以正常运行。换句话说,loadstring行等同于_G[activity]()。如果在其他某些环境中创建了全局run,则会评估为nil

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

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

虽然如果这是在你从配置文件或其他东西获得字符串值的上下文中,那就不行了。