通过引用调用 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++ 函数?

lua 的 “传值” 与 “传引用”(亦称 “传址”)

Lua中调用C函数(lua-5.2.3)

是否可以在包含对 C 函数的引用的 lua 字节码字符串上调用 loadstring?

Lua 调用的 C 函数保存 state 的两种方式: Storing State in C Functions 笔记

Step By Step(Lua调用C函数)