lua – 知道是否可以调用一个值
发布时间:2020-12-14 21:44:47 所属栏目:大数据 来源:网络整理
导读:请注意,这个问题是关于纯Lua.我无权访问任何模块或C端.另外,我不能使用IO,OS或调试库. 我想要做的是一个接收的函数,作为参数: 一个数字,是第二个 可调用的值 通过’可调用值’,我的意思是可以调用的值.这可以是: 一个功能 一个带有metatable的表,允许调用(
请注意,这个问题是关于纯Lua.我无权访问任何模块或C端.另外,我不能使用IO,OS或调试库.
我想要做的是一个接收的函数,作为参数: >一个数字,是第二个 通过’可调用值’,我的意思是可以调用的值.这可以是: >一个功能 这是一个可调用表的示例: 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的表允许调用呢? 请注意,我还考虑过尝试用pcall调用’func’参数来检查它是否可调用,但为了做到这一点,我需要过早地调用它. 基本上,这就是问题所在:我需要知道函数/表是否可调用,而不是试图调用它. 解决方法
一般来说,如果metatable不希望你能够得到它(通过将__metatable定义为特殊的东西),那么你就不会得到它.不是来自Lua.
但是,如果要作弊,可以始终使用debug.getmetatable,它将返回与该对象关联的元表. 你不必过早地使用pcall调用任何东西.注意: pcall(function(...) return PossibleFunction(...) end,<insert arguments here>) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |