gpt4 book ai didi

dynamic - lua从带有函数名的字符串调用函数

转载 作者:行者123 更新时间:2023-12-02 08:11:21 24 4
gpt4 key购买 nike

lua 中是否可以通过表示函数名称的字符串来执行函数?
即:我有 string x = "foo",是否可以执行 x()

如果是,语法是什么?

最佳答案

调用全局命名空间中的函数(如@THC4k所述)很容易完成,并且不需要loadstring()

x='foo'
_G[x]() -- calls foo from the global namespace

如果函数位于另一个表中,则需要使用 loadstring()(或遍历每个表),例如 if x='math.sqrt'

如果使用 loadstring(),您不仅需要在括号后添加椭圆 (...) 以允许参数,还需要添加 return 到前面。

x='math.sqrt'
print(assert(loadstring('return '..x..'(...)'))(25)) --> 5

或者走 table :

function findfunction(x)
assert(type(x) == "string")
local f=_G
for v in x:gmatch("[^%.]+") do
if type(f) ~= "table" then
return nil, "looking for '"..v.."' expected table, not "..type(f)
end
f=f[v]
end
if type(f) == "function" then
return f
else
return nil, "expected function, not "..type(f)
end
end

x='math.sqrt'
print(assert(findfunction(x))(121)) -->11

关于dynamic - lua从带有函数名的字符串调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com