如何将Lua函数以列表形式存储于文件中?
- 内容介绍
- 文章标签
- 相关推荐
本文共计441个文字,预计阅读时间需要2分钟。
要列出Lua源文件中包含的所有函数名,可以使用以下Lua代码片段:
lua-- 假设Lua文件内容如下local function test1() print(Test 1)end
function test2() print(Test 2)end
-- 以下Lua代码将遍历当前文件的所有函数,并打印其名称local function listFunctions() local functionVisitor=function(self, name, env) if type(self)==table and name then print(name) end end
local function scan(env) local envType=type(env) if envType==table then for key, value in pairs(env) do scan(value) end elseif envType==function then local fnName=getinfo(env).name if fnName then functionVisitor(fnName, env) end end end
scan(_G)end
listFunctions()
运行这段代码,将会输出当前Lua源文件中定义的所有函数名。在这个例子中,它会输出:
test1test2
如何列出Lua源文件中包含的所有函数?例如,我有fn.lua包含
function test1() print("Test 1") end function test2() print("Test 2") end
我希望能够从另一个Lua脚本中显示这些函数名称(test1,test2).
我现在唯一能想到的方法是使用require包含文件,然后列出_G中的函数 – 但是这也将包括所有标准的Lua函数.
当然我可以使用字符串搜索功能手动解析文件,但这对我来说似乎不是很好!
这最终将成为允许开发人员在Lua中编写函数的过程的一部分,并且运算符可以从Excel(yuk!)中的列表中选择调用哪些函数.
如果你把它们都放在一个“模块”中(无论如何你应该这样做):mymodule = { } function mymodule.test1() print("Test 1") end function module.test2() print("Test 2") end return mymodule
它变得微不足道:
mymodule = require"mymodule" for fname,obj in pairs(mymodule) do if type(obj) == "function" then print(fname) end end
如果你必须以原始形式保存它们,你必须以不同的方式加载它们以分离你的全局环境,然后以类似的方式迭代它(在内部env的清理_G上,也许).
本文共计441个文字,预计阅读时间需要2分钟。
要列出Lua源文件中包含的所有函数名,可以使用以下Lua代码片段:
lua-- 假设Lua文件内容如下local function test1() print(Test 1)end
function test2() print(Test 2)end
-- 以下Lua代码将遍历当前文件的所有函数,并打印其名称local function listFunctions() local functionVisitor=function(self, name, env) if type(self)==table and name then print(name) end end
local function scan(env) local envType=type(env) if envType==table then for key, value in pairs(env) do scan(value) end elseif envType==function then local fnName=getinfo(env).name if fnName then functionVisitor(fnName, env) end end end
scan(_G)end
listFunctions()
运行这段代码,将会输出当前Lua源文件中定义的所有函数名。在这个例子中,它会输出:
test1test2
如何列出Lua源文件中包含的所有函数?例如,我有fn.lua包含
function test1() print("Test 1") end function test2() print("Test 2") end
我希望能够从另一个Lua脚本中显示这些函数名称(test1,test2).
我现在唯一能想到的方法是使用require包含文件,然后列出_G中的函数 – 但是这也将包括所有标准的Lua函数.
当然我可以使用字符串搜索功能手动解析文件,但这对我来说似乎不是很好!
这最终将成为允许开发人员在Lua中编写函数的过程的一部分,并且运算符可以从Excel(yuk!)中的列表中选择调用哪些函数.
如果你把它们都放在一个“模块”中(无论如何你应该这样做):mymodule = { } function mymodule.test1() print("Test 1") end function module.test2() print("Test 2") end return mymodule
它变得微不足道:
mymodule = require"mymodule" for fname,obj in pairs(mymodule) do if type(obj) == "function" then print(fname) end end
如果你必须以原始形式保存它们,你必须以不同的方式加载它们以分离你的全局环境,然后以类似的方式迭代它(在内部env的清理_G上,也许).

