1

簡単にしましょう。

実行する複数のテストがあり、各テストの後、package.loaded[] = nil を使用して、現在のテストで行われたすべての要件をクリアします。

問題は、必要なファイルをグローバル名前空間から削除しても、これらのファイルによって行われた ffi.cdef がそのまま残っていることがわかります。

ロードされた cdef をクリアできる方法はありますか? または、ロードされたcdefを取得して、古いcdefを保存し、テストが完了したら元に戻すことができますか? または、同じタスクを実行できる別の方法はありますか?

ffi.uncdef のようなものを探しています。

4

1 に答える 1

1

そのような機能はなく、正当な理由があります。

まず第一に、設定package.loaded[pkg] = nilはモジュール、特に C コードをアンロードする公式の方法ではありません。以前の回答の 1 つを参照してください。さらに、cdef のアンロードはそれほど単純ではありません。オブジェクトがそれを使用している cdef をアンロードするとどうなりますか?

cdefs を実行するコードをテストする唯一の方法は、テストlua_Stateごとに新しいプロセスまたは luajit プロセスを作成することです。

(また、LUA ではなく Lua です)

于 2014-05-09T00:46:50.633 に答える