2

我要将一个函数传递给另一个应该与传递的函数一起运行的函数。例如:

     handler(fun1("foo",2))
     handler(fun2(1e-10))

处理程序类似于多次调用传递的函数。我要将处理程序、fun1、fun2 绑定到 C 函数。fun1 和 fun2 将返回一些带有指向某个 cpp 类的指针的用户数据,以便我可以进一步恢复它是哪个函数。

现在的问题是 fun1 和 fun2 在传递给处理程序之前将被调用。但是我不需要这个,我需要的是函数的种类和它的参数。但是,我应该能够在没有处理程序的情况下单独调用 fun1 和 fun2:

     fun1("bar",3)
     fun2(1e-5)

是否可以获取调用函数的上下文?

在输入问题时,我意识到我可以做以下事情

    handler(fun1, "foo",2);
    handler(fun2, 1e-10);
4

2 回答 2

1

可能最好的方法是传递函数,并在表中调用您想要调用的参数。

function handler(func, args)
    -- do housekeeping here?
    ...
    -- call the function
    local ret = func(table.unpack(args))
    -- do something with the return value?
end

handler(fun1, {"foo", 2})
handler(fun2, {1e-10})
于 2012-05-31T14:20:17.223 回答
1

您可以将调用绑定到另一个函数中的参数并将其传递给您的处理程序函数:

function handler(func)
        -- call func, or store it for later, or whatever
end

handler(function() fun1("foo", 2) end)
handler(function() fun2(1e-10) end)

现在handler不必担心存储和解包参数表,它只需调用一个函数。

于 2012-06-07T22:36:07.037 回答