ファイルは、その関数がグローバルであると宣言しているか、返されたものを本当に追跡するのは簡単でしょう。その場合は
、あなたはそれらのすべてのループのための一般的なグローバル項目、およびだけ取る機能を一巡することができます
allFuncs = {}
for key, item in pairs(_G) do
if type(item) == "function" then
allFuncs[#allFuncs + 1] = item
end
end
を
(
_G
は、すべてのグローバル変数を保持するテーブルです)
すべての関数を宣言したリスト(allFuncs
)がありますが、setmetatable
やxpcall
などの既定の関数も含まれていることに注意してください。
これが実現するしないようにコードを変更するのは簡単ですが、唯一のテスト/学習のためにこれを使用します。
function allFuncs()
local funcsTab = {}
for key, item in pairs(_G) do
if type(item) == "function" then
funcsTab[#funcsTab + 1] = item
end
end
return funcsTab
end
defaultFuncs = allFuncs()
--then you load your file: other functions get declared
--we create another table containg the default + the new functions
myFuncs = allFuncs()
--then you subtract the first table from the second
for i = 1, #myFuncs do
for o = 1, #defaultFuncs do
if myFuncs[i] == defaultFuncs[o] then
table.remove(myFuncs, i)
end
end
end
ファイルが何かを返し、グローバルとしての機能を宣言していない場合、これはあります。
ファイルがそれらをローカルとして宣言し、それを含むテーブルを返した場合は、_G
をその返されたテーブルに置き換える最初のコードを使用してください。
スクリプトはダイナミックになるでしょう(ユーザーが作成した別の場所から来ています)。スクリプトに定義されているすべての関数を取得する必要があります。グローバル関数ではありません。ありがとう、結構です! –
しかし、そのスクリプトはどのように関数を宣言しますか?それを「ローカル」と宣言してから、テーブルに戻しますか?それとも、何も返さずにグローバル関数として宣言するだけですか?テーブルを返す場合は、上記のコードを '_G'をその返されたテーブルに置き換えることができます。 – user6245072