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

lua – 知道是否可以调用一个值

发布时间:2020-12-14 21:44:47 所属栏目:大数据 来源:网络整理
导读:请注意,这个问题是关于纯Lua.我无权访问任何模块或C端.另外,我不能使用IO,OS或调试库. 我想要做的是一个接收的函数,作为参数: 一个数字,是第二个 可调用的值 通过’可调用值’,我的意思是可以调用的值.这可以是: 一个功能 一个带有metatable的表,允许调用(
请注意,这个问题是关于纯Lua.我无权访问任何模块或C端.另外,我不能使用IO,OS或调试库.

我想要做的是一个接收的函数,作为参数:

>一个数字,是第二个
>可调用的值

通过’可调用值’,我的意思是可以调用的值.这可以是:

>一个功能
>一个带有metatable的表,允许调用(通过__call元方法)

这是一个可调用表的示例:

local t = {}
setmetatable(t,{
  __call = function() print("Hi.") end
})
print(type(t)) --> table
t() --> Hi.

这是功能:

function delay(seconds,func)
  -- The second parameter is called 'func',but it can be anything that is callable.
  coroutine.wrap(function()
    wait(seconds) -- This function is defined elsewhere. It waits the ammount of time,in seconds,that it is told to.
    func() -- Calls the function/table.
  end)()
end

但我有一个问题.如果参数’func’不可调用,我希望函数抛出错误.

我可以检查它是否是一个功能.但是如果它是一个带有metatable的表允许调用呢?
如果表的metatable不受__metatable字段的保护,那么,我可以检查metatable以了解它是否可调用,但是,否则,我该怎么做?

请注意,我还考虑过尝试用pcall调用’func’参数来检查它是否可调用,但为了做到这一点,我需要过早地调用它.

基本上,这就是问题所在:我需要知道函数/表是否可调用,而不是试图调用它.

解决方法

一般来说,如果metatable不希望你能够得到它(通过将__metatable定义为特殊的东西),那么你就不会得到它.不是来自Lua.

但是,如果要作弊,可以始终使用debug.getmetatable,它将返回与该对象关联的元表.

你不必过早地使用pcall调用任何东西.注意:

pcall(function(...) return PossibleFunction(...) end,<insert arguments here>)

(编辑:李大同)

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

    推荐文章
      热点阅读