lua函数作为C中的参数

时间:2012-05-31 14:15:41

标签: lua

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

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

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

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

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

是否可以从中调用函数的上下文?

在输入问题时,我意识到我可以执行以下操作

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

2 个答案:

答案 0 :(得分: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})

答案 1 :(得分: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不必担心存储和解包参数表,它只是调用一个函数。