如何在IEx中获取所有Elixir模块及标准库模块列表?
在IEx中获取模块列表的方法
嘿,这两个问题其实都有很直接的解决办法,我来一步步给你讲清楚:
一、获取当前环境中所有已加载的Elixir模块列表
如果你想拿到当前IEx会话里已经加载的所有模块(包括标准库、你自己写的代码、第三方依赖的模块),可以用Erlang的:code.all_loaded()函数。它会返回一个元组列表,每个元组是{模块名, beam文件路径}的格式。
要只提取模块名的话,配合Enum.map处理一下就行:
Enum.map(:code.all_loaded(), fn {mod, _path} -> mod end)
运行之后你就能看到所有已加载模块的原子列表啦,比如Enum、Map、YourApp.MyModule这些都会在里面。
二、获取Elixir标准库的所有模块列表
如果只想拿到官方标准库的模块,有两种靠谱的方式:
方法1:通过应用规范直接获取
Elixir的标准库本身是一个名为:elixir的应用,我们可以直接从它的应用规范里拿到所有定义的模块:
Application.spec(:elixir, :modules)
这个方法最准确,因为它直接读取Elixir应用打包时声明的模块列表,不会包含第三方或自定义模块。
方法2:从标准库的beam文件路径提取
如果你想手动从文件系统层面找,也可以这么做:
- 先获取Elixir标准库的安装路径
- 遍历路径下的所有
.beam文件(这些是编译后的模块文件) - 从文件名转换为模块名
代码示例:
# 获取Elixir标准库的ebin目录路径 elixir_ebin_dir = Path.join(:code.lib_dir(:elixir), "ebin") # 找到所有beam文件 beam_files = Path.wildcard(Path.join(elixir_ebin_dir, "*.beam")) # 转换为模块名 Enum.map(beam_files, fn file -> file |> Path.basename(".beam") |> String.to_atom() end)
这个方法适合你想确认文件系统里的标准库模块时用,结果和方法1基本一致。
内容的提问来源于stack exchange,提问作者Loading...
相关产品推荐
相关产品推荐

