加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 00:21:27 所属栏目:大数据 来源:网络整理
导读:在lua中可以从代表其名称的字符串执行函数吗? 即:我有字符串x =“foo”,是否可以做x()? 如果是,语法是什么? 解决方法 在全局命名空间中调用一个函数(由@ THC4k提到)很容易完成,并且不需要loadstring()。 x='foo'_G[x]() -- calls foo from the global
在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读