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 に答える