通过引用调用 Lua 函数
Posted
技术标签:
【中文标题】通过引用调用 Lua 函数【英文标题】:Call Lua function by reference 【发布时间】:2012-08-15 21:21:46 【问题描述】:好的,我搜索了这个,但无济于事。这是一种模糊的想法/想法,所以……就这样吧。
是否可以在 Lua 中调用一个函数(带有声明的值),然后通过引用再次调用它(无需再次传递值)?
我要做的是创建一个更大的泛型函数(重复使用),它具有在调用泛型函数时声明的传递值。
如果泛型函数失败,我希望它回收并尝试使用相同的使用值调用自身(无需再次将它们传递给函数。)
如果我没有失去任何人,希望有一些想法和想法。 蒂姆
【问题讨论】:
Is it possible to emulate bind in Lua?的可能重复 【参考方案1】:如果您希望将参数传递给函数,则需要每次都传递它们。
您可以通过闭包将一些参数绑定到函数:
function bind(f, ...)
local args = ...
return function()
return f(unpack(args))
end
end
foo = bind(print, "This", "is", "a", "test")
foo() --> This is a test
foo() --> This is a test
如果您发布一些示例代码,会更容易回答您的问题。
【讨论】:
Mud,我想你知道我想做什么了。我只是在阅读关于关闭的文章,可能会对“绑定”道路有所了解......我希望更具体,但正如我所说,这只是处于最初的模糊想法/想法阶段。谢谢 如果传递的值是变量而不是实际的字符串值,有没有办法做到这一点?我正在尝试将变量发送到函数,如果变量的值在以后发生变化,调用原始值(在这种情况下,“foo()”将返回“这是一个测试”,而不是变量的新值...谢谢,蒂姆 是的,你可以绑定到变量,但是闭包会绑定到bind
中的局部变量,而不是调用者的变量。 Lua 变量保存对对象的引用。它们不能保存对变量的引用。如果您的所有函数都采用table
参数,您可以绑定到可变值并稍后更改其内容。 旁注:如果您告诉我们实际问题是什么,我们可能会想出一个非常优雅的解决方案来解决您的问题。
Mud,我的设想是下载并使用 LuaZip 解压缩档案。最初调用该函数时,源、目的地、密码等都已提供。如果下载或解压缩操作失败,我希望它重试下载/解压缩功能,而无需重新发送所有变量。
下载是异步的吗?以上是关于通过引用调用 Lua 函数的主要内容,如果未能解决你的问题,请参考以下文章
是否可以通过函数地址从 lua 脚本调用任何主机 c/c++ 函数?
是否可以在包含对 C 函数的引用的 lua 字节码字符串上调用 loadstring?