我想在Lua文件中调用函数,但仅当函数存在时, 怎么会这样做?
答案 0 :(得分:5)
尝试if foo~=nil then foo() end
。
答案 1 :(得分:3)
我认为最强大的涵盖所有可能性(对象不存在,或者它存在但不是函数,或者不是函数但可以调用),是使用受保护的调用来实际调用它:如果它不存在则没有真正被调用,如果它存在并且可调用,则返回结果,否则没有真正被调用。
function callIfCallable(f)
return function(...)
error, result = pcall(f, ...)
if error then -- f exists and is callable
print('ok')
return result
end
-- nothing to do, as though not called, or print('error', result)
end
end
function f(a,b) return a+b end
f = callIfCallable(f)
print(f(1, 2)) -- prints 3
g = callIfCallable(g)
print(g(1, 2)) -- prints nothing because doesn't "really" call it
答案 2 :(得分:1)
非实例化变量被解释为nil
,所以下面是另一种可能性。
if not foo then
foo()
end
答案 3 :(得分:0)
如果您的字符串可能是全局函数的名称:
local func = "print"
if _G[func] then
_G[func]("Test") -- same as: print("test")
end
并且如果您有一个可能有效的功能:
local func = print
if func then
func("ABC") -- same as: print("ABC")
end
如果您想知道上面发生了什么以及背景是什么,_G
是一个关于lua的全局表,它存储了每个全局函数。此表按名称将全局变量存储为键,以及值(函数,数字,字符串)。如果您的_G
表不包含您要查找的对象的名称,那么您的对象可能不存在或者它是本地对象。
在第二个代码框中,我们正在创建一个名为local
的{{1}}变量,并将func
函数作为值。 (请注意,不需要括号。如果打开括号,它会调用函数并获取输出值,而不是自己的函数)。
块上的print
语句,检查您的函数是否存在。在lua脚本中,不仅可以使用简单的if
语句检查booleans
,而且可以使用简单的if
语句检查函数和对象的存在。
在我们的if
块中,我们调用我们的if
变量,就像我们调用值(local
)的全局函数一样,它更像是给我们的函数({ {1}})便于使用的第二个名称或快捷方式名称。