动态 – lua调用函数从一个带函数名的字符串

前端之家收集整理的这篇文章主要介绍了动态 – lua调用函数从一个带函数名的字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在lua中可以从代表其名称的字符串执行函数吗?
即:我有字符串x =“foo”,是否可以做x()?

如果是,语法是什么?

解决方法

在全局命名空间中调用一个函数(由@ THC4k提到)很容易完成,并且不需要loadstring()。
x='foo'
_G[x]() -- calls foo from the global namespace

如果另一个表中的函数,如x =’math.sqrt’,则需要使用loadstring()(或遍历表)。

如果使用loadstring(),您将不仅需要使用椭圆(…)来附加括号以允许参数,还可以向前添加返回值。

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

或走桌子:

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

猜你在找的Lua相关文章